在一个字典列表中查找最大值

3

给定一个数据结构:

   [
    {'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}
      ]
    },
  ]

我想在每个字典中找到年龄最大值的项,并选择它。我该怎么做?

今天的这个问题让人不禁想起了这个问题,虽然它们并不完全相同。 - David Robinson
看起来像是JSON数据。你知道可以直接使用json加载它吗? - inspectorG4dget
真的吗?我该怎么做呢? - user266003
2个回答

8

试试这个:

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'}

1
也许使用 operator 模块会更易读:print max(dVals['items'], key=operator.itemgetter('age')) - Reed Sandberg

0
def find_largest_age(entry):
  return max(entry['items'], key=lambda d: d['age'])

map(find_largest_age, data_structure)

map 会将函数应用于顶层列表中的每个条目。

max 将在 'items' 列表的每个成员上调用提供的 key 函数,并返回该函数给出最大值的那个成员。

请注意,您可以将此变为一行代码:

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

但那相当不易读。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接