美文网首页
Python中dict的值为list的问题

Python中dict的值为list的问题

作者: Sui_Xin | 来源:发表于2019-02-19 14:17 被阅读0次

    本文首发于我的个人博客Suixin’s Blog
    原文: https://suixinblog.cn/2019/02/python-dict-list-trouble.html  作者: Suixin

    本质上,如果你设置一个dict的值为list,那么你大概率是想该dict的键能够映射多个值,并且能够不断的增添、删除或者修改。
    Python中list的操作总是简单的,所以很多时候我都将容器设置为list,而在这次操作中,却踩了坑。

    dict的值为list的坑

    info_keys = ['NAME', 'AGE', 'SEX']
    info_all = dict.fromkeys(info_keys, [])
    info = {'NAME': 'Tom', 'AGE': 22, 'SEX': 'F'}
    for key in info_keys:
        info_all[key].append(info[key])
    print(info_all)
    

    输出却为:

    {'NAME': ['Tom', 22, 'F'], 'AGE': ['Tom', 22, 'F'], 'SEX': ['Tom', 22, 'F']}
    

    为什么?

    正确方法

    info_keys = ['NAME', 'AGE', 'SEX']
    info_all = {'NAME': [], 'AGE': [], 'SEX': []}
    info = {'NAME': 'Tom', 'AGE': 22, 'SEX': 'F'}
    for key in info_keys:
        info_all[key].append(info[key])
    print(info_all)
    

    或者

    info_keys = ['NAME', 'AGE', 'SEX']
    info_all = {}
    info = {'NAME': 'Tom', 'AGE': 22, 'SEX': 'F'}
    for key in info_keys:
        info_all.setdefault(key, []).append(info[key])
    print(info_all)
    

    均能正确输出结果:

    {'NAME': ['Tom'], 'AGE': [22], 'SEX': ['F']}
    

    所以,好像是dict.fromkeys()的锅??

    参考

    https://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p06_map_keys_to_multiple_values_in_dict.html

    相关文章

      网友评论

          本文标题:Python中dict的值为list的问题

          本文链接:https://www.haomeiwen.com/subject/ukaxyqtx.html