[英]Selecting items from a python dictionary
给定以下数据结构:
data = {'NameValues':[
{'Name':'Field 1', 'Values':['Data 1']},
{'Name':'Field 2', 'Values':['Data 2']},
{'Name':'Field 3', 'Values':['Data 3']},
{'Name':'Field 4', 'Values':['Data 4']},
{'Name':'Field 5', 'Values':['Data 5']}
]}
如何通过名称查找并获取元素的值? 例如,获取字段3的值。
在Ruby中,我将使用以下代码:
p hash['NameValues'].find{ |h| h['Name'] == 'Field 3'}['Values']
#=> ["Data 3"]
这将遍历NameValues数组,直到找到匹配的元素。 然后,我可以从返回的元素中获取值。
问候
对于您的迭代需求,生成器更合适:
>>> data = {'NameValues':[
... {'Name':'Field 1', 'Values':['Data 1']},
... {'Name':'Field 2', 'Values':['Data 2']},
... {'Name':'Field 3', 'Values':['Data 3']},
... {'Name':'Field 4', 'Values':['Data 4']},
... {'Name':'Field 5', 'Values':['Data 5']}
... ]}
>>> i = (v['Values'] for v in data['NameValues'] if v['Name'] == 'Field 3')
>>> next(i)
['Data 3']
没有更多符合条件的元素时,您将获得StopIteration
异常。
for i in data['NameValues']:
if i['name'] == 'Field 3':
value = i['values']
# use value here
虽然我是使用Python的新手,但有人可能会给出更好的答案。
您可以使用类似的语法来:
p hash['NameValues'].find{ |h| h['Name'] == 'Field 3'}['Values']
#=> ["Data 3"]
带filter
:
>>> data = {'NameValues':[
... {'Name':'Field 1', 'Values':['Data 1']},
... {'Name':'Field 2', 'Values':['Data 2']},
... {'Name':'Field 3', 'Values':['Data 3']},
... {'Name':'Field 4', 'Values':['Data 4']},
... {'Name':'Field 5', 'Values':['Data 5']}
... ]}
>>>
>>> filter(lambda h: h['Name'] == 'Field 3', data['NameValues'])[0]['Values']
['Data 3']
>>>
或者如果您使用Python 3:
>>> list(filter(lambda h: h['Name'] == 'Field 3', data['NameValues']))[0]['Values']
您可以通过以下方式在某个容器C
创建满足条件f
的所有值的列表:
l = [ e(v) for v in C if f(v) ]
其中e
是一些提取函数。
在您的特定情况下,您可以使用C:=data'NameValues'
, e(v):=v['values']
, f(v):=v['Name']=='Field 3'
l = [ v['Values'] for v in data['NameValues'] if v['Name'] == 'Field 3' ]
print l
如果您只对第一次出现感兴趣
l = [ v['Values'] for v in data['NameValues'] if v['Name'] == 'Field 3' ][0]
print l
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.