python - 从列表中获取键和值

标签 python list dictionary matplotlib

我在制作字典以及从名称和值列表中获取键和值时遇到问题。

列表如下所示:

['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对重复键的值求和,在列表上调用 iter 并在压缩后循环解压每个配对:

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/

相关文章:

python - 为 PyDev 安装 Jython 时出错

java - 在 Java 中是否有更优雅的处理列表的方法? (Python 与 Java)

javascript - React Native - 如何使用 AsyncStorage 保存 map

reactjs - 如何根据键从 Typescript 的 Dictionary 数据结构中删除条目?

javascript - 如何在 javascript 中按我们想要的键对集合(字典)进行排序?

在两个标记之间查找字符串的 Python 函数

python - 如何传播默认值

python - Anaconda ImportError : libSM. so.6: 无法打开共享对象文件: 没有那个文件或目录

c++ - 我想编写一个遍历列表的函数?

c++ - 包含链表的链表给出堆损坏错误 : Why?