我在制作字典以及从名称和值列表中获取键和值时遇到问题。
列表如下所示:
['smer', '1245', 'kdh', '7845', 'smer', '697', 'sns', '78', 'du', '421', 'smer', '632', 'ol', '4144', 'most-hid', '457', 'smer', '12', 'ol', '897', 'most-hid', '1234', 'kdh', '555', 'ol', '898', 'du', '7845']
我的问题是如何获取名称作为键和数字作为值。
如果键已经在字典中,它将把这些值加在一起。
然后我如何用它制作饼图。
我刚刚学习Python,我无法弄清楚这个。
def strany():
slovnik={}
zoznam=[]
x=open('Strany.txt','r')
for i in x.readlines():
i=i.strip()
casty=i.split(' ')
for x in casty:
zoznam.append(x)
我不知道如何继续
感谢您的建议。
最佳答案
您可以使用 collections.defaultdict对重复键的值求和,在列表上调用 ite
r 并在压缩后循环解压每个配对:
l = ['smer', '1245', 'kdh', '7845', 'smer', '697', 'sns', '78', 'du', '421', 'smer', '632', 'ol', '4144', 'most-hid', '457', 'smer', '12', 'ol', '897', 'most-hid', '1234', 'kdh', '555', 'ol', '898', 'du', '7845']
from collections import defaultdict
d = defaultdict(int)
it = iter(l)
for k,v in zip(it,it):
d[k] += int(v)
print(d)
defaultdict(<class 'int'>, {'sns': 78, 'ol': 5939, 'du': 8266, 'smer': 2586, 'most-hid': 1691, 'kdh': 8400})
如果您的配对来自文件,只需使用 csv 库解压文件来解析文件,假设您的数据由空白分隔:
from collections import defaultdict
import csv
with open("infile") as f:
d = defaultdict(int)
for k,v in csv.reader(f,delimiter=" "):
d[k] += int(v)
print(d)
您可以使用常规字典和 dict.setdefault
实现相同的效果:
with open("infile") as f:
d = {}
for k,v in csv.reader(f,delimiter=" "):
d.setdefault(k , 0)
d[k] += int(v)
关于python - 从列表中获取键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764596/