我有一个行列表......
rows = [2, 21]
数据字典......
data = {'x': [46, 35], 'y': [20, 30]}
我想构建第二个字典,dataRows
,由看起来像这样的行键入...
dataRows = {2: {'x': 46, 'y': 20}, 21: {'x': 35, 'y': 30}}
我尝试了以下代码,但dataRows
的值始终相同(循环中的最后一个值):
for i, row in enumerate(rows):
for key, value in data.items():
dataRows[row] = value[i]
非常感谢任何协助。
答案 0 :(得分:7)
您的问题是您没有在dataRows中放置子词典。修复将是这样的:
toString()
答案 1 :(得分:2)
以下代码适用于我:
rows = [2, 21]
data = {'x': [46, 35], 'y': [20, 30]}
dataRows = {}
for i, row in enumerate(rows):
dataRows[row] = {}
dataRows[row]['x'] = data['x'][i]
dataRows[row]['y'] = data['y'][i]
print dataRows
更新:
您还可以使用collections.defaultdict()来避免在每次迭代中将dict分配给dataRows。
import collections
rows = [2, 21]
data = {'x': [46, 35], 'y': [20, 30]}
dataRows = collections.defaultdict(dict)
for i, row in enumerate(rows):
for key, value in data.items():
dataRows[row][key] = value[i]
print dataRows
答案 2 :(得分:0)
排成一行:
>>> {r: {k: v[i] for k, v in data.items()} for i, r in enumerate(rows)}
{2: {'x': 46, 'y': 20}, 21: {'x': 35, 'y': 30}}
答案 3 :(得分:0)
这是一个只有一个显式循环的Python 3解决方案:
{r: dict(zip(data.keys(), d)) for r, *d in zip(rows, *data.values())}