如何在Python中结合字典的初始化和赋值?
我想知道是否有交易被选中两次或更多 为了便于阅读,下面的示例被简化。但本质上,我认为最好的解决方案是使用字典,每当任何交易容器(如deal_pot__1)包含相同的交易两次或更多次时,我都会将其捕获为错误 下面的代码对我很有用,但是它本身抛出了一个异常如何在Python中结合字典的初始化和赋值?,python,Python,我想知道是否有交易被选中两次或更多 为了便于阅读,下面的示例被简化。但本质上,我认为最好的解决方案是使用字典,每当任何交易容器(如deal_pot__1)包含相同的交易两次或更多次时,我都会将其捕获为错误 下面的代码对我很有用,但是它本身抛出了一个异常 if deal_pot_1: duplicates[deal_pot_1.pk] += 1 if deal_pot_2: duplicates[deal_pot_2.pk] += 1 if
if deal_pot_1:
duplicates[deal_pot_1.pk] += 1
if deal_pot_2:
duplicates[deal_pot_2.pk] += 1
if deal_pot_3:
duplicates[deal_pot_3.pk] += 1
…如果我之前没有像下面那样初始化它
if deal_pot_1:
duplicates[deal_pot_1.pk] = 0
if deal_pot_2:
duplicates[deal_pot_2.pk] = 0
if deal_pot_3:
duplicates[deal_pot_3.pk] = 0
是否有任何方法可以简化/合并此操作?请查看。看起来您需要
defaultdict(int)
基本上有两个选项:
collections.defaultdict(int)
。在访问未知密钥时,它将相应的值初始化为0d
,您可以
d[x] = d.get(x, 0) + 1
在单个语句中初始化和递增编辑:第三个选项是
集合。计数器
,正如Mark Byers所指出的。看起来像是您想要的。所以您只想知道是否存在重复的值?然后你可以使用:
如果要查找所有重复项:
maybe_duplicates = set()
confirmed_duplicates = set()
for value in values:
if value in maybe_duplicates():
confirmed_duplicates.add(value)
else:
maybe_duplicates.add(value)
if confirmed_duplicates:
raise Exception('Duplicates: ' + ', '.join(map(str, confirmed_duplicates)))
集合可能是实现此目的的方式—collections.defaultdict可能超出您的需要
别忘了给你的手定一个标准的顺序,比如按花色和面值从最小到最大排序。否则您可能检测不到一些重复项。第一个无法正常工作,但第二个对我有效,谢谢。
maybe_duplicates = set()
confirmed_duplicates = set()
for value in values:
if value in maybe_duplicates():
confirmed_duplicates.add(value)
else:
maybe_duplicates.add(value)
if confirmed_duplicates:
raise Exception('Duplicates: ' + ', '.join(map(str, confirmed_duplicates)))