将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())}