将Python列表值映射到字典值
我有一个行列表将Python列表值映射到字典值,python,Python,我有一个行列表 行=[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): dataRows[r
行=[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):
dataRows[row] = {}
for key, value in data.items():
dataRows[row][key] = value[i]
以下代码适用于我:
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分配给数据行
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
排成一行:
>>> {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}}
这是一个只有一个显式循环的Python 3解决方案:
{r: dict(zip(data.keys(), d)) for r, *d in zip(rows, *data.values())}
数据
和行
之间的连接是什么?因为如果您跳按插入顺序连接它们,您将遇到问题,因为字典按哈希值对项目进行排序。行的位置对应于数据字典中值的位置。因此,换句话说,如果行=2(位置=0),它对应的值是数据['x']中的x=46(位置0)和数据['y']中的y=20(位置0)。与我在答案中输入的代码(包括空格)完全相同(因为您先发布,所以没有发布)。@AndroidNoobie另外,请注意使用collections.defaultdict()这允许您避免将dict分配给每个迭代(下文)
{r: dict(zip(data.keys(), d)) for r, *d in zip(rows, *data.values())}