【问题标题】:How to get key values from default dictionary in Python?如何从 Python 中的默认字典中获取键值?
【发布时间】:2015-01-27 13:59:24
【问题描述】:

我有一个名为 df 的默认字典:

defaultdict(<type 'int'>, {u'DE': 1, u'WV': 1, u'HI': 1, u'WY': 1, u'NH': 2, u'NJ': 1, u'NM': 1, u'TX': 1, u'LA': 1, u'NC': 1, u'NE': 1, u'TN': 1, u'RI': 1, u'VA': 1, u'CO': 1, u'AK': 1, u'AR': 1, u'IL': 1, u'GA': 1, u'IA': 1, u'MA': 1, u'ID': 1, u'ME': 1, u'OK': 2, u'MN': 1, u'MI': 1, u'KS': 1, u'MT': 1, u'MS': 1, u'SC': 2, u'KY': 1, u'OR': 1, u'SD': 1})

如何获取值大于 1 的字典的键。

如果我这样做[df[val] for val in df if df[val]&gt;1]

我得到的输出是[2, 2, 2]

如果我打印 [df.keys() for val in df if df[val]&gt;1] 仍然没有得到键值,我需要像这样 ['SC', 'OK', 'NH'] 值大于 2 的键 我该怎么做??

【问题讨论】:

  • [val for val in df...]?但将其称为key 会更清楚;这就是您迭代的内容,默认情况下:[key for key in df if df[key] &gt; 1]。或者,[key for key, val in df.items() if val &gt; 1].
  • @jonrsharpe 如果我调用 .key 会出现属性错误
  • 我从不建议.key
  • @jonrsharpe [str(val) for val in df if df[val]>1] 这行得通,非常感谢!!!

标签: python dictionary dictionary-comprehension


【解决方案1】:

从使用defaultdict() 创建的字典中读取与普通dict 相同。

要获取值 > 1 的键,您可以:

my_dict = defaultdict(...)
print [key for key, value in my_dict.iteritems() if value > 1]

如果您使用的是 Python 3,那么它是 my_dict.items()

【讨论】:

  • [str(val) for val in df if df[val]>1] 这要简单得多。我还找到了默认字典的替代方法。 Counter(pymotw.com/2/collections/counter.html) 和 countStates.most_common()
  • 好吧,如果你要走那条路,它至少应该是 [str(key) for key in df if df[key] &gt; 1],考虑到这些是你正在迭代的键,而不是值。
【解决方案2】:

我们可以使用列表压缩方法。

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d['HI'] = 1
>>> d['NH'] = 2
>>> d['WY'] = 1
>>> d['OK'] = 2
>>> [i[0] for i in d.items() if i[1]>1]
['NH', 'OK']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多