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是的,当然,但我很确定这比仅仅列出乘法和串联要慢。看看解包的过程,它看起来实际上可能更快,但我还没有深入研究它。