python,从列表到dict列表的映射名称

时间:2017-04-26 08:10:33

标签: python

我有以下列表和dicts列表:

data = [dict(position=1, value=150.3), 
        dict(position=0, value=28.5), 
        dict(position=2, value=1050.3)]

names = ["CL", "ES", "EUR"]

我想将列表的值映射到dicts列表中,以便它们匹配键中的值#34; position"字典 - 获得以下结果:

data = [dict(name="ES", position=1, value=150.3), 
        dict(name="CL", position=0, value=28.5), 
        dict(name="EUR", position=2, value=1050.3)]

有没有" smart"和pythonic的方法实现那个?

5 个答案:

答案 0 :(得分:2)

首先,请以实际的Python形式提出您的问题。 dict是一种类型;你在Python中表示字典的方式是{}

此外,你没有“dict and list”,你有两个列表,其中一个列表由三个词典组成。所以:

data = [
  {'position': 1, 'value': 150.3},
  {'position': 0, 'value': 28.5},
  {'position': 2, 'value': 1050.3}
]

names = ["CL", "ES", "EUR"]

因此,鉴于您确实有列表,因此不必担心订购。一个简单的循环将为您提供所需的内容:

for d in data:
    d['name'] = names[d['position']]

这会更新data

>>> data
[{'position': 1, 'name': 'ES', 'value': 150.3}, {'position': 0, 'name': 'CL', 'value': 28.5}, {'position': 2, 'name': 'EUR', 'value': 1050.3}]

答案 1 :(得分:1)

您可以使用列表推导和字典update

data = [dict(position = 2, value=150.3), 
        dict(position = 1, value = 28.5), 
        dict(position=3, value=1050.3)]

names = ['CL', 'ES', 'EUR']

# Sort names according to "position" value of the dictionary
sorted_names = [names[idx] for idx in map(lambda x: x['position'], data)]
# Update modifies inplace
_ = [data[idx].update({'name' : el}) for idx, el in enumerate(sorted_names)]

这给出了预期的输出:

data
[{'name': 'ES', 'position': 2, 'value': 150.3},
 {'name': 'CL', 'position': 1, 'value': 28.5},
 {'name': 'EUR', 'position': 3, 'value': 1050.3}]

答案 2 :(得分:1)

你可以尝试:

data = [{"position": 2, "value": 150},
        {"position": 1, "value": 200}]
names = ["CL", "ES"]

for item in data:
    item["name"] = names[item["pos"] - 1]

我们浏览列表中的所有词典,然后对于每个词典,我们将"name"键设置为等于dataitem["pos"]中描述的位置的值减去data 1。

这当然假设您的数据干净,names中的所有项目都正确映射到for item in data: try: item["name"] = names[item["pos"] - 1] except IndexError: item["name"] = None 中的项目。

如果不是这种情况,请使用try-except:

WHERE TYPE(rel)="FOLLOW" 
AND "User" IN labels(followed)
AND "User" IN labels(follower)

答案 3 :(得分:0)

如果你喜欢关键字 - 参数约定,你也可以在列表中的字典元素上使用update方法,如问题的样式所示。

for item in data:
    item.update(name=names[item["position"]])

答案 4 :(得分:0)

使用列表理解的单线程实现。

print [dict(d.items()+[('name',names[d['position']-1])]) for d in data]