繁体   English   中英

从python字典中选择项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM