python字典fromkeys()方法中的坑

  • 自定操作中的fromkeys()方法接收两个参数,第一个参数为一个可迭代对象,作为返回字典的key,第二个参数为value,默认为None,具体用法如下:
    li = [1,2,3]
    dic1 = dict.fromkeys(li)
    dic2 = dict.fromkeys(li,[])
    print(dic1)    # {1: None, 2: None, 3: None}
    print(dic2)    # {1: [], 2: [], 3: []}
  • 此时我为dic2中key为1的列表增加一个元素‘test’,如下:
    dic2[1].append(‘test‘)
    print(dic2)      # {1: [‘test‘], 2: [‘test‘], 3: [‘test‘]}
  • 竟然把三个列表的值都给改了,这是为啥呢?先打印下他们的内存地址
    print("dic2[1]:{}\ndic2[2]:{}\ndic2[3]:{}".format(id(dic2[1]),id(dic2[2]),id(dic2[3])))
    # dic2[1]:1714986428808
    # dic2[2]:1714986428808
    # dic2[3]:1714986428808
  • 原来它的所有键都指向了同一个内存地址,这也就不难怪修改其中一个而引发联动了,因为本质上只有一个列表。因此,在字典中定义不同的列表不要用fromkeys方法,还是老老实实定义吧
    dic2 =  {1: [], 2: [], 3: []}
    print(id(dic2[1]))  # 1657985662344
    print(id(dic2[2]))  # 1657986500680
    print(id(dic2[3]))  # 1657986501960
    dic2[1].append(‘test‘)
    print(dic2)
    # {1: [‘test‘], 2: [], 3: []}
  • 使用循环来产生多key的字典:
    dic2 = {}
    for k in range(10):
    dic2[k] = []
    print(dic2)   # {0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: []}
  • tips: fromkeys方法会返回一个新的字典,对原字典无影响
    dic1 = {1:2}
    dic2 = dic1.fromkeys([1,2,3],‘test‘)
    print(dic1)    #  {1: 2}
    print(dic2)   # {1: ‘test‘, 2: ‘test‘, 3: ‘test‘}
  • 原文地址:https://blog.51cto.com/hld1992/2366257

    时间: 2024-07-31 12:35:03

    python字典fromkeys()方法中的坑的相关文章

    Python 字典 items() 方法

    Python 字典 items() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回可遍历的(key, value) 元组数组. >>> D = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www. taobao.com'} >>> print(D.items()) dict_items([('Google', 'www.google.com'), ('R

    python字典copy()方法

    python 字典的copy()方法表面看就是深copy啊,明显独立 1 d = {'a':1, 'b':2} 2 c = d.copy() 3 print('d=%s c=%s' % (d, c)) Code1 结果: d={'a': 1, 'b': 2}  c={'a': 1, 'b': 2} 修改d,看看c变化没有. 1 d['a']=3 2 print('d=%s c=%s' % (d, c)) Code2 结果: d={'a': 3, 'b': 2}  c={'a': 3, 'b':

    [python] 字典和列表中的pop()函数

    在字典和列表中,pop()函数都是删除特定元素,并将删除的元素返回给指定的变量或丢弃 一.字典元素删除 1.1 clear() 语法:dict.clear() 1 x = {'a':1, 'b':2, 'c':3} 2 m= x.clear() 3 print(x,m) 4 #输出 5 {} None 说明:删除所有的元素 1.2 pop() 语法:dict.pop(key,[value]) 说明:删除指定键及对应的值,如果在字典中不存在键及value,则返回pop()中指定的key对应的val

    python 字典 get方法

    在做项目的过程中,遇到了一个问题,数据保存到字典中,后来发现数据不对,排查了字典的构建过程,是OK的,后来怀疑是别的部分共用了这一个字典,排查代码,发现这里应该是有问题的. score = None deltaScore = result.get('score', [0 for _ in range(4)] if not score: score = deltaScore else: for index in range(4): score[index] += deltaScore[index]

    Python连接MySQL数据库中各种坑

    第一个坑 要想连接数据库,我们必须拥有MySQL-python这个模块,首先,我在安装这个模块的时候就到了第一个大坑. 常规安装方法:进入cmd 使用 pip install MySQL-python 就可以,如果你这样可以安装那就是万幸啊. 第二种安装方法:进入到和常规方法一样的目录:使用easy_install MySQL-python 命令安装   ,但是我同样入坑,无法安装. 第三种:直接在Pycharm(我用的是Pycharm)里面,进入file>settings>Project&g

    python 字典get方法

    t1 = [ ['aa'], ['ff'], ['er'] ] t2 = [ ['aa', 11,], ['er', 99,] ] d2 = dict(t2) res = [[k[0], d2.get(k[0], 0)] for k in t1] 来自为知笔记(Wiz)

    Python 字典(Dictionary) items()方法

    欢迎关注本人博客:云端筑梦师 描述 Python 字典 items() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回可遍历的(键, 值) 元组数组. 语法 Dict.items() 参数 NA 返回值 以列表形式返回可遍历的(键, 值) 元组数组. 实例 示例代码: D = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'} print("字典值 :

    python字典嵌套字典的情况下获取某个key的value

    最近在用python写接口的测试程序,期间用到解析字典获取某个key的value,由于多个接口返回的字典格式不是固定的并存在多层嵌套的情况.在字典的方法中也没有找到可直接达到目的的方法(也可能是我对字典的方法了解的不深的缘故),于是自己写了个程序. 1 #coding: utf-8 2 import types 3 4 #获取字典中的objkey对应的值,适用于字典嵌套 5 #dict:字典 6 #objkey:目标key 7 #default:找不到时返回的默认值 8 def dict_get

    Python 字典(Dictionary) has_key()方法-判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false

    描述 Python 字典(Dictionary) has_key() 函数用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false. 语法 has_key()方法语法: dict.has_key(key) 参数 key -- 要在字典中查找的键. 返回值 如果键在字典里返回true,否则返回false. 实例 以下实例展示了 has_key()函数的使用方法: #!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7} pri