【发布时间】:2020-01-27 00:11:39
【问题描述】:
我有 2 个字典对象:
members = {'member3': ['PCP3'], 'member4': ['PCP1'], 'member11': ['PCP2'], 'member12': ['PCP3']}
providers = {'PCP1': 2, 'PCP2': 2, 'PCP3': 1, 'PCP4': 3, 'PCP5': 4}
我想遍历两者,并且每次出现“成员”字典的值时,从该特定提供者的计数中减去一个。如果提供者的计数达到零,则将它们从“提供者”字典中删除,并从“成员”字典中随机挑选一个成员。所以在这种情况下 member3 或 member12 将被踢出,因为没有足够的位置。
例如,如果 member3 赢得了随机折腾,结果将如下所示:
members = {'member3' : 'PCP3', 'member4': 'PCP1' , 'member11': PCP2}
providers = {'PCP1: 1, 'PCP2' : 1, 'PCP4': 3, 'PCP5' : 4}
我已经尝试从这个开始,但这个问题超出了我的能力范围
from collections import defaultdict
query_dict=defaultdict(set)
for (k,v), (k2,v2) in zip(members_reduced.items(), PCPs.items()):
query_dict[k[v]].subtract(k2[v2])
这会报错
TypeError:字符串索引必须是整数
我也试过了:
for (k,v), (k2,v2) in zip(members_reduced.items(), PCPs.items()):
if members_reduced[v] == PCPs[k2]:
PCPs[v2] -= 1
有错误
TypeError: unhashable type: 'list'
我不知道如果第一部分正确,我将如何输入随机条件。这是我在工作中需要的更大模型中的一个更小的模型
【问题讨论】:
-
迭代
members.items()然后执行if value in providers: providers[value] -= 1等等会简单得多。 -
很难为您的暂定解决方案提供提示,因为您在输入和暂定解决方案中使用不同的名称,因此它们不会在没有猜测的情况下运行,这会阻止其他人调试它们或复制您的观察到的行为没有不必要的猜测。请考虑调整您的问题以生成minimal reproducible example。
-
对不起,我不确定你在哪里指的是不同的名字。输出字典具有相同的名称。结构也是相同的,只是成员减少了,因为一个成员被引导并且提供者的数量更少
-
PCPs和members_reduced在您的解决方案中使用但未定义...
标签: python dictionary counter