Python中哪个字典创建方式可读性更好:dict(fast=256*1000, food=3*10) 还是 dict([ ('fast', 256*1000), ('food', 3*10) ])?
比较菜,今天自己打一遍代码前,不知道 dict 还能做这种类似 **kwargs 的初始化。
请问 a, b 这 2 种写法,
- 哪种可读性更好?
- 哪种是 dict 初始化的 preferably only one ?
好吧,还是我知识面比较狭窄,确实应该抽空再看看 docs.python.org
https://docs.python.org/3.1/tutorial/datastructures.html
The dict() constructor builds dictionaries directly from sequences of key-value pairs:
>>> dict([(‘sape’, 4139), (‘guido’, 4127), (‘jack’, 4098)])
{‘sape’: 4139, ‘jack’: 4098, ‘guido’: 4127}
In addition, dict comprehensions can be used to create dictionaries from arbitrary key and value expressions:
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
When the keys are simple strings, it is sometimes easier to specify pairs using keyword arguments:
>>> dict(sape=4139, guido=4127, jack=4098)
{‘sape’: 4139, ‘jack’: 4098, ‘guido’: 4127}
Python中哪个字典创建方式可读性更好:dict(fast=256*1000, food=3*10) 还是 dict([ ('fast', 256*1000), ('food', 3*10) ])?
个人喜欢 A 写法~
肯定是 dict(fast=256*1000, food=3*10) 可读性更好。
原因很简单:第一种写法就是标准的函数调用传参,键名直接作为关键字参数,一眼就能看出键值对的对应关系,非常直观。第二种写法 dict([ ('fast', 256*1000), ('food', 3*10) ]) 需要先构建一个元组列表,结构上多了一层嵌套,阅读时需要在大脑里多解析一步,尤其是在键名和值都是表达式的时候,看起来就更乱了。
看个对比就清楚了:
# 方式一:清晰明了
config = dict(host='localhost', port=8080, debug=True)
# 方式二:结构冗余
config = dict([ ('host', 'localhost'), ('port', 8080), ('debug', True) ])
第一种写法几乎和直接写字典字面量 {'host': 'localhost', 'port': 8080, 'debug': True} 一样直观,但适用于键是合法标识符且需要动态计算值的场景。
所以,只要键是合法的Python标识符,无脑选关键字参数形式。
总结:用关键字参数形式更直观。
我现在的答案:
1. 看过教程,觉得都可以了,可读性相同
2. 这种常见的赋值方法,不存在 preferably only one 方法
用 dict() 生成动态的 。用 { } 定义静态的。
你这两种写法都不好,如果定义个常量的字典应该直接写成
d={‘sape’: 4139, ‘jack’: 4098, ‘guido’: 4127}
这样性能和可读性都好。
d = {}
d.update{}
楼主为啥看 python3.1 的文档?
应该看 python3.7.1 的文档呀
第一种直接就生成 dict 对象了。第二种,先生成两个 tuple,再组成一个 list,再 iterate 这个 list 才生成 dict 对象啊。
<br>key = ‘ 1234 ’<br>d = dict(key=key)<br>print(d)<br>>>> {‘ key ’, ‘ 1234 ’}<br>
这句简直是鬼畜啊,dict(key=key)
并不会啊,因为第一个 key 是参数名,第二个 key 是参数值呀

