2

与えられたデータ構造:

   [
    {'id':0, 'items': 
      [
       {'id': 0,  name: "Tom1", age: 10}, 
       {'id': 0, name: "Mark1", age: 15}, 
       {'id': 0, name: "Pam1", age: 17}
      ]
    },
    {'id':1, 'items': 
      [
       {'id': 1,  name: "Tom12", age: 8}, 
       {'id': 1, name: "Mark12", age: 3}, 
       {'id': 1, name: "Pam12", age: 2}
      ]
    },

    {'id':2, 'items': 
      [
       {'id': 2,  name: "Tom13", age: 55}, 
       {'id': 2, name: "Mark13", age: 66}, 
       {'id': 2, name: "Pam13", age: 77}
      ]
    },
  ]

各辞書で年齢が最大の項目を見つけて選択したい。どうすればそれを達成できますか?

4

2 に答える 2

7

これを試して:

for dVals in yourData:
    print max(dVals['items'], key=lambda x:x['age'])

またはワンライナー:

print [max(dVals['items'], key=lambda x: x['age']) for dVals in yourData]

{'id': 0, 'age': 17, 'name': 'Pam1'}
{'id': 1, 'age': 8, 'name': 'Tom12'}
{'id': 2, 'age': 77, 'name': 'Pam13'}
于 2012-11-07T02:35:59.597 に答える
0
def find_largest_age(entry):
  return max(entry['items'], key=lambda d: d['age'])

map(find_largest_age, data_structure)

mapトップレベル リストの各エントリに関数を適用します。

maxkeyリストの各メンバーで提供された関数を呼び出し、'items'その関数が最大値を与える関数を返します。

これをワンライナーにすることができることに注意してください:

map(lambda e: max(e['items'], key=lambda d: d['age']), data_structure)

しかし、それはむしろ読みにくいです。

于 2012-11-07T02:35:47.150 に答える