首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用{}.fromkey(['k1','k2'],[])和{'k1':[],'k2':[]}的问题

使用{}.fromkey(['k1','k2'],[])和{'k1':[],'k2':[]}的问题
EN

Stack Overflow用户
提问于 2021-04-17 11:26:09
回答 2查看 39关注 0票数 0
代码语言:javascript
复制
list1 = [99,55]
dict1 = {'k1':[],'k2':[]}

for num in list1:
    if num > 77:
        dict1['k1'].append(num)
    else:
        dict1['k2'].append(num)
print(dict1)

{'k1':99,'k2':55}

但是当我替换dict1 = {'k1':[],'k2':[]}到{}.fromkeys('k1','k2',[])时,结果变成{'k1':99,55,'k2':99,55}

为什么会发生这种事?我真的不知道。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-17 11:47:53

之所以会发生这种情况,是因为要将相同的list对象传递给两个键。这与为变量创建别名时的情况相同:

代码语言:javascript
复制
a = []
b = a

a.append(55)
b.append(99)

print(b)

打印[55, 99],因为它是相同的列表实例。

如果您希望从一个键列表中使其更加简洁,以便使用空列表进行初始化,则可以这样做:

代码语言:javascript
复制
dict1 = {k: [] for k in ('k1', 'k2')}

这将为每个键创建一个新的list实例。

或者,您可以使用defaultdict

代码语言:javascript
复制
from collections import defaultdict



list1 = [99,55]
dict1 = defaultdict(list)

for num in list1:
    if num > 77:
        dict1['k1'].append(num)
    else:
        dict1['k2'].append(num)
print(dict1)

也很管用。

票数 0
EN

Stack Overflow用户

发布于 2021-04-17 14:41:13

fromKeys()还可以提供一个可变对象作为默认值。如果我们在原始列表中追加值,则在所有键的值中都会追加。示例:

代码语言:javascript
复制
list1 = ['a', 'b', 'c', 'd']
list2 = ['SALIO']
dict1 = dict.fromkeys(list1, list2)
print(dict1)

产出:

代码语言:javascript
复制
{'a': ['SALIO'], 'b': ['SALIO'], 'c': ['SALIO'], 'd': ['SALIO']}

然后你可以使用这个:

代码语言:javascript
复制
list1 = ['k1', 'k2']
dict1 = {'k1':[],'k2':[]}
list2 =[99,55]
for num in list2:
    if num > 77:
        a = ['k1']
        dict1 = dict.fromkeys(a, [num])   
    else:
        b = ['k2']
        dict2 = dict.fromkeys(b,[num] )
res = {**dict1, **dict2}
print(res)

产出:

代码语言:javascript
复制
{'k1': [99], 'k2': [55]}

您还可以使用python代码合并dict代码:这个函数:

代码语言:javascript
复制
def Merge(dict1, dict2):
    return(dict2.update(dict1))

然后:

代码语言:javascript
复制
print(Merge(dict1, dict2)) #This return None

print(dict2) # changes made in dict2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67137627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档