У меня есть два оригинальных объявленных словаря:
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}
Хорошо, хорошо, я пытаюсь сделать арифметическую c различную операцию между двумя:
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
и providers
. Я пытался использовать OrderedDict()
при объявлении учетных записей PCP, и это также возвращает их в неправильном порядке. Как мне поддерживать соответствующие порядки ключей? Я не мог найти такой вопрос в другом посте. Спасибо