字典列表中给定键的访问值



给定一个字典列表,例如:

list_ = [
{ 'name' : 'date',
'value': '2021-01-01'
},
{ 'name' : 'length',
'value': '500'
},
{ 'name' : 'server',
'value': 'g.com'
},

如何访问键名==长度的值?

如果可能的话,我想避免迭代,只是能够检查名为'length'的键是否存在,如果存在,则获取其值。

通过迭代,并使用next,您可以:

list_ = [
{'name': 'date',
'value': '2021-01-01'
},
{'name': 'length',
'value': '500'
},
{'name': 'server',
'value': 'g.com'
}
]
res = next(dic["value"] for dic in list_ if dic.get("name", "") == "length")
print(res)

500

作为一种选择,如果"names"是唯一的,您可以构建一个字典来避免对list_的进一步迭代,如下所示:

lookup = {d["name"] : d["value"] for d in list_}
res = lookup["length"]
print(res)

500

注意,如果需要第二个键,如"server",则不需要迭代,只需执行:

lookup["server"]  # g.com

如果不遍历列表中的元素,肯定很难找到它。这是我要展示的第一个解决方案:

list(filter(lambda element: element['name'] == 'length', list_))[0]['value']

这将只过滤列表中名称为'length'的元素,从列表中选择第一个元素,然后选择该元素的'value'。

现在,如果你有一个更好的数据结构,你就不必迭代了。不幸的是,为了创建更好的数据结构,我们必须迭代列表。带有"名称"的字典列表和";value"可能只是一个字典,其中& name"为key和"value"是value。创建字典:

dict_ = {item['name']:item['value'] for item in list_} 

然后选择'length'

dict_['length']