【问题标题】:Need help to find with dictionary objects in python需要帮助在 python 中查找字典对象
【发布时间】:2014-07-19 11:23:41
【问题描述】:

我有一个字典对象说:

d = {
    '25478329': ['17647430', '376088951', '32416061', '43096205'],
    '43096205': '17647430',
    '376088951': ['17647430', '25478329', '32416061'],
    '32416061': ['17647430', '25478329']
}

我需要帮助找到具有最大数据数的键。 这里的数据是指列表中的字符串值。

【问题讨论】:

  • 你的意思是键值是最大的字符串列表吗?
  • ...您的价值观之一真的是字符串而不是字符串列表吗?
  • 是的,其值为最大字符串列表的键。是的,值可以是字符串或字符串列表。

标签: python list dictionary max min


【解决方案1】:

您的问题可能会更清楚,但如果您想要的是我在 cmets 中建议的,这将起作用:

def keyfunc(item):
    key, value = item
    if isinstance(key, str):
        return 1
    else:
        return len(key)

max(d.items(), key=keyfunc)[0]

在这里,我们定义了一个键函数,它接受dict.items() 返回的键/值二元组,并且:

  • 如果值为字符串,则返回 1。
  • 否则,返回字符串列表的长度。

然后将该键函数与内置的max() 函数一起使用以返回字符串数最多的项目,最后我们使用[0] 从该项目中获取键。

【讨论】:

  • 如果我必须找到每个键的值中出现次数最多的字符串?
  • 这是一个不同的问题......继续问它(在一个新问题中,而不是通过编辑这个问题):-)
【解决方案2】:

我了解到您希望返回具有最大数据数的键。

一个非常实用的解决方案:

max_key = max(
    d.items(),
    key=lambda (_, values): len(values) if type(values) == list else 1
)[0]

【讨论】:

  • 对,现在检查 values 是否是一个列表。如果不是,则假定长度为 1。
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 2020-10-17
相关资源
最近更新 更多