Py学习  »  Python

在进行算术运算时如何维护两个python字典之间的匹配顺序

Ben Smith • 5 年前 • 1439 次点击  

members = OrderedDict({
    "member1" : ["PCP2", "PCP3"],
    "member2" : ["PCP1", "PCP2"],
    "member3" : ["PCP3"],
    "member4" : ["PCP1"],
    "member5" : ["PCP4", "PCP5"],
    "member6" : ["PCP1", "PCP5"],
    "member7" : ["PCP2", "PCP3", "PCP4"],
    "member8" : ["PCP3", "PCP5"],
    "member9" : ["PCP1", "PCP4", "PCP5"],
    "member10" : ["PCP2", "PCP4"],
    "member11" : ["PCP2"],
    "member12" : ["PCP3"],
    "member13" : ["PCP4", "PCP5"]
    })
providers = OrderedDict({
    "PCP1" : 3,
    "PCP2" : 4,
    "PCP3" : 2,
    "PCP4" : 3,
    "PCP5" : 4,
})

价值观 providers members 对于每个提供者。

PCPcounts = {}
for m in members.values():
    for v in m:
        if v in PCPcounts:
            PCPcounts[v] += 1
        else:
            PCPcounts[v] = 1
PCPcounts

如果我像这样运行我的笔记本电脑,我会按我想要的顺序输出它:

{'PCP1': 4, 'PCP2': 5, 'PCP3': 5, 'PCP4': 5, 'PCP5': 5}

但是如果我用 print(PCPcounts) 我得到:

{'PCP2': 5, 'PCP3': 5, 'PCP1': 4, 'PCP4': 5, 'PCP5': 5}

differences = dict()
    for (k,v), (k2,v2) in zip(PCPcounts.items(), providers.items()):
        differences[k] = v - v2

print(differences)
{'PCP2': 2, 'PCP3': 1, 'PCP1': 2, 'PCP4': 2, 'PCP5': 1}

这是不对的。例如 PCP1: 2 应该是, PCP1: 1 PCPcounts . 我试过用 OrderedDict()

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53817
 
1439 次点击  
文章 [ 2 ]  |  最新文章 5 年前