从字典列表中获取特定键和值

7

所以我有一个字典列表:

l = [{'COUNTRY': 'UK', 'STUDENT': 'JOHN'}, {'COUNTRY': 'PT', 'STUDENT':'PEDRO'}, {'COUNTRY': 'UK', 'STUDENT': 'KYLE'}, {'COUNTRY': 'IT', 'STUDENT':'PIRLO'}, {'COUNTRY': 'PT', 'STUDENT':'ANA'}, {'COUNTRY': 'FR', 'STUDENT':'VITO'}, {'COUNTRY': 'FR', 'STUDENT':'LOUIS'}]

我需要制作一个柱状图,x轴是列表上的国家,y轴是每个国家出现的次数。我的想法是将这些国家“提取”到一个列表中,就像这样:

country_list = ['UK','PT','UK','IT','PT','FR','FR']

然后,我需要统计每个国家出现的次数,并按频率对列表进行排序。

在完成所有这些操作之后,我会得到两个列表:

country = ['UK','PT','FR','IT']

frequency = [2,2,2,1]

通过这两个列表,我将能够制作条形图。如何从原始字典列表中获取这两个列表?


1
使用collections模块中的Counter - kuro
我认为我知道如何使用Counter来获取项目的频率,但是如果不混淆频率列表的顺序,我该如何从country_list中删除重复项? - Cardo20
3个回答

7

拥有您的列表

l = [{'COUNTRY': 'UK', 'STUDENT': 'JOHN'}, {'COUNTRY': 'PT', 'STUDENT':'PEDRO'}, {'COUNTRY': 'UK', 'STUDENT': 'KYLE'}, {'COUNTRY': 'IT', 'STUDENT':'PIRLO'}, {'COUNTRY': 'PT', 'STUDENT':'ANA'}, {'COUNTRY': 'FR', 'STUDENT':'VITO'}, {'COUNTRY': 'FR', 'STUDENT':'LOUIS'}]

你可以首先提取所有国家的值:

In [18]: k = [i['COUNTRY'] for i in l]

那么您可以使用collections模块中的Counter

In [19]: m = Counter(k)
Out[19]: Counter({'FR': 2, 'IT': 1, 'PT': 2, 'UK': 2})

获取轴线:
In [20]: countries = m.keys()

In [21]: frequency = m.values()

In [22]: countries
Out[22]: ['FR', 'PT', 'UK', 'IT']

In [23]: frequency
Out[23]: [2, 2, 2, 1]

2
#You can solve this problem easily by using lambda function:

country_list = list(map(lambda dict: dict['COUNTRY'], list))

# You can count the same data by using Counter function:

from collections import Counter 
counter = Counter(country_list)
counter = ({'UK': 2, 'PT': 2, 'FR': 2, 'IT': 1})

由于您的回答与问题中的输入不一致,很难理解您的回答。正确的写法应该是:country_list=list(map(lambda x: x['COUNTRY'], l)),其中l是输入列表。 - undefined

2
l = [{'COUNTRY': 'UK', 'STUDENT': 'JOHN'}, {'COUNTRY': 'PT', 'STUDENT':'PEDRO'}, {'COUNTRY': 'UK', 'STUDENT': 'KYLE'}, {'COUNTRY': 'IT', 'STUDENT':'PIRLO'}, {'COUNTRY': 'PT', 'STUDENT':'ANA'}, {'COUNTRY': 'FR', 'STUDENT':'VITO'}, {'COUNTRY': 'FR', 'STUDENT':'LOUIS'}]




myDict = {}

for d in l:
  c = d['COUNTRY']
  myDict[c] = myDict.get(c,0)+1
print(myDict)  

country = myDict.values()
frequency = myDict.keys()

print(country)
print(frequency)


=========

{'UK': 2, 'PT': 2, 'IT': 1, 'FR': 2}
dict_values([2, 2, 1, 2])
dict_keys(['UK', 'PT', 'IT', 'FR'])

这正是我所需要的,代码非常易懂,谢谢! - Cardo20

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