Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中结合字典的初始化和赋值?_Python - Fatal编程技术网

如何在Python中结合字典的初始化和赋值?

如何在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

我想知道是否有交易被选中两次或更多

为了便于阅读,下面的示例被简化。但本质上,我认为最好的解决方案是使用字典,每当任何交易容器(如deal_pot__1)包含相同的交易两次或更多次时,我都会将其捕获为错误

下面的代码对我很有用,但是它本身抛出了一个异常

    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)
    。在访问未知密钥时,它将相应的值初始化为0

  • 对于字典
    d
    ,您可以

    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)))