给定一个字典列表,例如:
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']