【问题标题】:Creating a new dictionary in Python在 Python 中创建一个新字典
【发布时间】:2012-01-15 12:46:52
【问题描述】:

我想用 Python 构建一个字典。但是,我看到的所有示例都是从列表等实例化字典。 ..

如何在 Python 中创建一个新的空字典?

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    不带参数调用dict

    new_dict = dict()
    

    或者直接写

    new_dict = {}
    

    【讨论】:

    • dict()和{}有区别吗?还是人们只是更喜欢其中之一?
    • @ Matt 显然 CPython 2.7 dict() 更慢(慢 6 倍?),请参阅:doughellmann.com/2012/11/… 无论如何,我开始更喜欢构造函数语法,因为我发现它更容易输入和在字典和函数调用之间移动代码。
    • 我确认在 python 3.x 中使用 { } 比 dict() 快 3 倍
    • 是的,在 python 3.6 中,{}dict() 快 4 倍,[]list() 快 5 倍。
    • 在绝大多数情况下,如果它需要六倍的时间并不重要,因为这仍然是一个微不足道的时间。
    【解决方案2】:

    你可以这样做

    x = {}
    x['a'] = 1
    

    【讨论】:

      【解决方案3】:

      了解如何编写预设字典也很有用:

      cmap =  {'US':'USA','GB':'Great Britain'}
      
      # Explicitly:
      # -----------
      def cxlate(country):
          try:
              ret = cmap[country]
          except KeyError:
              ret = '?'
          return ret
      
      present = 'US' # this one is in the dict
      missing = 'RU' # this one is not
      
      print cxlate(present) # == USA
      print cxlate(missing) # == ?
      
      # or, much more simply as suggested below:
      
      print cmap.get(present,'?') # == USA
      print cmap.get(missing,'?') # == ?
      
      # with country codes, you might prefer to return the original on failure:
      
      print cmap.get(present,present) # == USA
      print cmap.get(missing,missing) # == RU
      

      【讨论】:

      • 好点!但我认为cxlate 的部分让你的答案看起来太复杂了。我只保留初始化部分。 (cxlate 本身太复杂了,你可以直接return cmap.get(country, '?')。)
      • 考虑使用 docs.python.org/2/library/… 而不是编写翻译函数或在任何地方使用 .get()。
      • 也许我会,除了文档对我来说绝对不透明——这太糟糕了。我不知道他们要我做什么,也不知道我为什么要这样做。并且 .get() 似乎做了完全正确的事情——而且它非常灵活。我敢肯定这是我缺乏理解。考虑到这一点,我的问题是:为什么要打扰?这里保存了什么,这里更容易,这里更快等等?好处究竟是什么?
      • 不相关,但您应该明确捕获 KeyError 而不是一个空的 except(这将捕获诸如 KeyboardInterruptSystemExit 之类的东西)。
      • Arnav,当然你是对的。相应地进行了编辑。谢谢!
      【解决方案4】:
      >>> dict(a=2,b=4)
      {'a': 2, 'b': 4}
      

      将在python字典中添加值。

      【讨论】:

        【解决方案5】:
        d = dict()
        

        d = {}
        

        import types
        d = types.DictType.__new__(types.DictType, (), {})
        

        【讨论】:

        • types.DictType.__new__(types.DictType, (), {}) 和刚才的{} 有什么区别
        • 对于任何阅读本文的人:最后一个“解决方案”有点儿笑话 - 你可以使用它(至少在 python 2.x 中 - 不会工作py3k),但它自己的头脑中没有人愿意这样做;-)
        【解决方案6】:

        所以有两种方法可以创建一个 dict :

        1. my_dict = dict()

        2. my_dict = {}

        但是在这两个选项中,{}dict() 更有效,而且它的可读性更强。 CHECK HERE

        【讨论】:

        • 为什么要提到python2.7? (在一篇相当老的文章中:2012-11-12,“在 CPython 2.7 中使用 dict() 而不是 {} 的性能影响”)
        • (7 年后)即使在 python 3.x.x 中性能也没有改变,你可以看到它运行 %timeit my_dict = {} vs %timeit my_dict = dict()
        【解决方案7】:
        >>> dict.fromkeys(['a','b','c'],[1,2,3])
        
        
        {'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
        

        【讨论】:

        • 问题指出字典应该是一个新的空实例
        • 请检查有问题的详细信息。问题是如何在 Python 中创建一个新的空字典?
        猜你喜欢
        • 1970-01-01
        • 2019-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 2021-03-09
        • 2021-04-17
        相关资源
        最近更新 更多