【问题标题】:Count of unique values in nested dict python嵌套dict python中唯一值的计数
【发布时间】:2016-09-06 16:08:29
【问题描述】:

我有一个像这样的字典:

dict = {
    "a": {"Azerbaijan": 20006.0, "Germany": 20016.571428571428},
    "b": {"Chad": 13000.0, "South Africa": 3000000.0},
    "c": {"Chad": 200061.0, "South Africa": 3000000.0}
}

我正在尝试获取每个独特国家和价值出现次数的字典。

例如,{"Chad": 2, "South Africa": 2,..},{"3000000": 2, "13000": 1,..}

我正在使用下面的代码,它可以工作但不是很聪明,有没有更好的方法可以在没有长迭代周期的情况下做到这一点,因为实际的 dict 很大?

seencountries = {}
seenvalues = {}

for key, innerdict in dict.iteritems():
    for country, value in innerdict.iteritems():
        if value not in seenvalues.keys():
            seenvalues[value] = 0
        seenvalues[value]+=1
        if country not in seencountries.keys():
            seencountries[country] = 0
        seencountries[country]+=1

print seencountries

print seenvalues

【问题讨论】:

  • 您的国家是主要国家?由于 Python 字典没有排序 - 你怎么知道从每个国家的字典中取哪个键?
  • 如果还没有看到。如果我理解正确,字典只包含唯一值?
  • 它们包含唯一的键 - 这是正确的。但是 - 键的顺序是任意的...或者您是否计算所有键而不仅仅是国家...?我相当确定键 a 这些键都不是国家...
  • 编辑问题以使其更清晰。
  • “Pennsylvania Avenue NW”是如何成为一个国家的,“3000000”是如何凭空变成结果的(输入中没有)?

标签: python dictionary iterator set


【解决方案1】:
from collections import Counter
seen_countries = Counter()
seen_values = Counter()
for data in your_dicts.itervalues():
    seen_countries += Counter(data.keys())
    seen_values += Counter(data.values())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2018-08-25
    • 2013-04-02
    相关资源
    最近更新 更多