0

次のデータ構造があるとします。

   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 配列を反復処理します。その後、返された要素から値を取得できます。

よろしく

4

4 に答える 4

4

反復要件については、ジェネレーターがより適切です。

>>> 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条件に一致する要素がなくなると、例外が発生します。

于 2013-11-04T10:01:50.403 に答える
1

同様の構文を使用して、次のことができます。

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']
于 2013-11-04T10:05:35.883 に答える
1
for i in data['NameValues']:
    if i['name'] == 'Field 3':
        value = i['values']
# use value here

私はPythonを使用する完全な初心者ですが、誰かがおそらくより良い答えを出すでしょう.

于 2013-11-04T10:00:15.167 に答える