Python 如何根据条件更新多个字典值?

Python 如何根据条件更新多个字典值?,python,dictionary,Python,Dictionary,我有一本字典,看起来像: dict = {'A':[1,2], 'B':[0], 'c':[4]} 需要它看起来像: dict = {'A':[1,2], 'B':[0,0], 'c':[4,0]} 我现在正在做的是: dict = {x: y+[0] for (x,y) in dict.items() if len(y) < 2} 你知道我怎样才能避免淘汰那些不符合条件的人吗?你就快到了。尝试: my_dict = {x: y + [0] if len(y) < 2 else

我有一本字典,看起来像:

dict = {'A':[1,2], 'B':[0], 'c':[4]}
需要它看起来像:

dict = {'A':[1,2], 'B':[0,0], 'c':[4,0]}
我现在正在做的是:

dict = {x: y+[0] for (x,y) in dict.items() if len(y) < 2}

你知道我怎样才能避免淘汰那些不符合条件的人吗?

你就快到了。尝试:

my_dict = {x: y + [0] if len(y) < 2 else y
           for (x,y) in dict.items()}
my_dict={x:y+[0]如果len(y)<2或者y
对于dict.items()中的(x,y)}

(正如jp_data_analysis所提到的,避免用内置变量命名,如
dict

你就快到了。尝试:

my_dict = {x: y + [0] if len(y) < 2 else y
           for (x,y) in dict.items()}
my_dict={x:y+[0]如果len(y)<2或者y
对于dict.items()中的(x,y)}
(正如jp_data_analysis所提到的,避免使用内置变量命名,如
dict

这是一种方法

注意:不要在类后命名变量,例如使用
d
而不是
dict

d = {'A':[1,2], 'B':[0], 'c':[4]}

d = {k: v if len(v)==2 else v+[0] for k, v in d.items()}

# {'A': [1, 2], 'B': [0, 0], 'c': [4, 0]}
这是一种方式

注意:不要在类后命名变量,例如使用
d
而不是
dict

d = {'A':[1,2], 'B':[0], 'c':[4]}

d = {k: v if len(v)==2 else v+[0] for k, v in d.items()}

# {'A': [1, 2], 'B': [0, 0], 'c': [4, 0]}

您可以使用字典理解:

d = {'A':[1,2], 'B':[0], 'c':[4]}
new_d = {a:b+[0] if len(b) == 1 else b for a, b in d.items()}

此外,最好不要将变量分配给隐藏在常见内置项后面的名称,例如
dict
,因为您将覆盖当前命名空间中的函数。

您可以使用字典理解:

d = {'A':[1,2], 'B':[0], 'c':[4]}
new_d = {a:b+[0] if len(b) == 1 else b for a, b in d.items()}

此外,最好的做法是不要将变量分配给隐藏在常见内置项后面的名称,例如
dict
,因为您将覆盖当前命名空间中的函数。

您非常接近,只需使用:

d={'A':[1,2],'B':[0],'c':[4]}
d、 更新({x:y+[0]用于d.items()中的(x,y)(如果len(y)<2})
D
#{'A':[1,2],'B':[0,0],'c':[4,0]}

正如其他人所说,不要使用像dict这样的重新分配保留名称,这是通往调试地狱的单行道。

您非常接近,只需使用:

d={'A':[1,2],'B':[0],'c':[4]}
d、 更新({x:y+[0]用于d.items()中的(x,y)(如果len(y)<2})
D
#{'A':[1,2],'B':[0,0],'c':[4,0]}
正如其他人所说,不要使用像dict这样的重新分配保留名称,这是通往调试地狱的单行道

  • 你的代码几乎是正确的。您的问题是筛选出了任何大于
    2
    的列表。你需要做的只是把它们放在新的字典里,保持不变。这可以使用。如果条件值为2,则其形式为
    value1

  • 另外,如果你想用一种更通用的方法来填充字典中的每个列表 长度相等,可以使用
    map
    max

  • 以下是经过上述修改的代码:

    >>> d = {'A':[1, 2], 'B': [0], 'c': [4]}
    >>> 
    >>> max_len = max(map(len, d.values()))
    >>> {k: v + [0] * (max_len - len(v)) if len(v) < max_len else v for k, v in d.items()}
    {'A': [1, 2], 'B': [0, 0], 'c': [4, 0]}
    >>> 
    
    d={'A':[1,2],'B':[0],'c':[4]} >>> >>>max_len=max(映射(len,d.values()) >>>{k:v+[0]*(max_len-len(v))如果len(v)>>
  • 你的代码几乎是正确的。您的问题是筛选出了任何大于
    2
    的列表。你需要做的只是把它们放在新的字典里,保持不变。这可以使用。如果条件值为2,则其形式为
    value1

  • 另外,如果你想用一种更通用的方法来填充字典中的每个列表 长度相等,可以使用
    map
    max

  • 以下是经过上述修改的代码:

    >>> d = {'A':[1, 2], 'B': [0], 'c': [4]}
    >>> 
    >>> max_len = max(map(len, d.values()))
    >>> {k: v + [0] * (max_len - len(v)) if len(v) < max_len else v for k, v in d.items()}
    {'A': [1, 2], 'B': [0, 0], 'c': [4, 0]}
    >>> 
    
    d={'A':[1,2],'B':[0],'c':[4]} >>> >>>max_len=max(映射(len,d.values()) >>>{k:v+[0]*(max_len-len(v))如果len(v)>> 通用方法:

    d = {'A':[1,2], 'B':[0], 'c':[4]}
    
    m = max(len(v) for v in d.values())
    for k, v in d.items():
        if len(v) < m:
            d[k].extend([0 for i in range(m-len(v))])
    
    d={'A':[1,2],'B':[0],'c':[4]}
    m=最大值(len(v)表示d中的v值()
    对于d.项()中的k,v:
    如果len(v)
    通用方法:

    d = {'A':[1,2], 'B':[0], 'c':[4]}
    
    m = max(len(v) for v in d.values())
    for k, v in d.items():
        if len(v) < m:
            d[k].extend([0 for i in range(m-len(v))])
    
    d={'A':[1,2],'B':[0],'c':[4]}
    m=最大值(len(v)表示d中的v值()
    对于d.项()中的k,v:
    如果len(v)
    无论是谁否决了这一答案,请您解释一下您的理由,以便我可以对其进行必要的改进?这段代码很有效,回答了这个问题,所以我不知道为什么它会吸引反对票。我也很喜欢你的答案,但我很想知道反对票的人在这方面的想法。对于反对这个答案的人,你能解释一下你的理由吗,这样我就可以改进它了?这段代码有效地回答了这个问题,所以我不确定它为什么会吸引到反对票。我实际上也喜欢你的答案,但我很想知道反对票的想法。值得指出的是,在3.5+中,你也可以组合如下列表:
    {k:[*v,*[0代表范围内的I(max_len-len(v))]如果len(v)
    @ZaxR是的,当然,但我很确定这比列表乘法和串联要慢。从解包的角度看,它似乎实际上可能更快,但我还没有深入研究它。值得指出的是,在3.5+中,您还可以按如下方式组合列表:
    {k:[*v,*[0代表范围内的I(max_len-len(v))]如果len(v)
    @ZaxR是的,当然,但我很确定这比仅仅列出乘法和串联要慢。看看解包的过程,它看起来实际上可能更快,但我还没有深入研究它。