在 Python 中创建一个新字典
Posted
技术标签:
【中文标题】在 Python 中创建一个新字典【英文标题】:Creating a new dictionary in Python 【发布时间】:2012-01-15 12:46:52 【问题描述】:我想用 Python 构建一个字典。但是,我看到的所有示例都是从列表等实例化字典。 ..
如何在 Python 中创建一个新的空字典?
【问题讨论】:
【参考方案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(这将捕获诸如 KeyboardInterrupt
和 SystemExit
之类的东西)。
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 :
my_dict = dict()
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 中创建一个新的空字典?以上是关于在 Python 中创建一个新字典的主要内容,如果未能解决你的问题,请参考以下文章