python - 使用嵌套列表创建字典,其中第一个列表是列,每个列表是一行?
问题描述
我有一个嵌套循环,其中第一个列表作为列名,每个后续列表都是一行。例如,我有一个嵌套列表,它给出了一个人的年龄和 1 或 0,表示他们是否喜欢这种颜色:
data = [['age', 'blue', 'green', 'red', 'orange'],
[12, 1, 0, 0, 1],
[10, 0, 1, 0, 1],
[9, 0, 0, 0, 0],
[8, 1, 0, 0, 0],
[13, 1, 1, 1, 0]
我想要一个看起来像这样的输出:
new_data ={(12, 'blue'): 1,
(12, 'green'): 0,
(12, 'red'): 0,
(12, 'orange'): 1,
(9, 'blue'): 0,
(9, 'green'): 1,
(9, 'red'): 0,
(9, 'orange'): 1 .....}
等,但所有数据。
我已经做到了:
ages = data[0][1:len(data[0])]
i = 1
for x in ages:
print({t[0] + x: t[i] for t in data[1:len(data)]})
i = i + 1
当我尝试将 t[0] 和 x 组合为一个元组时,它最终只给了我:
{'12blue': 1, '10blue': 0, '9blue': 0, '8blue': 1, '13blue': 1}
{'12green': 0, '10green': 1, '9green': 0, '8green': 0, '13green': 1}
等等
解决方案
您可以执行以下操作:
import pprint
data = [['age', 'blue', 'green', 'red', 'orange'],
[12, 1, 0, 0, 1],
[10, 0, 1, 0, 1],
[9, 0, 0, 0, 0],
[8, 1, 0, 0, 0],
[13, 1, 1, 1, 0]]
colors, *rows = data # split in colors and rows
d = {}
for row in rows:
idi, *marks = row # split in id and marks
for color, mark in zip(colors[1:], marks): # iterate in parallel over marks and colors
d[(idi, color)] = mark
pprint.pprint(d)
输出
{(8, 'blue'): 1,
(8, 'green'): 0,
(8, 'orange'): 0,
(8, 'red'): 0,
(9, 'blue'): 0,
(9, 'green'): 0,
(9, 'orange'): 0,
(9, 'red'): 0,
(10, 'blue'): 0,
(10, 'green'): 1,
(10, 'orange'): 1,
(10, 'red'): 0,
(12, 'blue'): 1,
(12, 'green'): 0,
(12, 'orange'): 1,
(12, 'red'): 0,
(13, 'blue'): 1,
(13, 'green'): 1,
(13, 'orange'): 0,
(13, 'red'): 1}
推荐阅读
- javascript - 将表数据保存到 cookie 并检索该表及其数据的问题
- react-native - 当我在反应导航中写入文本输入时,如何激活 NavigationOptions 内的按钮?
- excel - 如何修复此特定代码行的应用程序定义或对象定义错误?
- c++ - 'Phone' (CPP) 的初始化没有匹配的构造函数
- python - 如何根据另一列中对应值的相似性获取一列值的平均值
- r - 使用 mvtnorm 库无法显示两个暗淡的正态分布轮廓
- python - 在Python中的多个条件下对多列进行分组求和和计数
- deployment - 我在哪里放置 asp net core 应用程序的部署文件
- c++11 - 当 shared_ptr get() 中的原始指针被删除时会发生什么?
- android - 在 Ubuntu 18 上构建 pyjnius 时 python-for-android 失败