我喜欢Python列表理解语法.
它也可以用来创建字典吗?例如,通过迭代成对的键和值:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
Run Code Online (Sandbox Code Playgroud) python dictionary list-comprehension dictionary-comprehension
想想我正在调用它的副作用的函数,而不是返回值(比如打印到屏幕,更新GUI,打印到文件等).
def fun_with_side_effects(x):
...side effects...
return y
Run Code Online (Sandbox Code Playgroud)
现在,是Pythonic使用列表推导来调用这个函数:
[fun_with_side_effects(x) for x in y if (...conditions...)]
Run Code Online (Sandbox Code Playgroud)
请注意,我不会将列表保存在任何位置
或者我应该像这样调用这个函数:
for x in y:
if (...conditions...):
fun_with_side_effects(x)
Run Code Online (Sandbox Code Playgroud)
哪个更好?为什么?
我有一个字典列表,并希望为此列表的每个元素添加一个键.我试过了:
result = [ item.update({"elem":"value"}) for item in mylist ]
Run Code Online (Sandbox Code Playgroud)
但是update方法返回None,所以我的结果列表中没有None.
result = [ item["elem"]="value" for item in mylist ]
Run Code Online (Sandbox Code Playgroud)
返回语法错误.
正如PythonCookbook中提到的,*可以在元组之前添加,*这里的意思是什么?
第1.18章.将名称映射到序列元素:
from collections import namedtuple
Stock = namedtuple('Stock', ['name', 'shares', 'price'])
s = Stock(*rec)
# here rec is an ordinary tuple, for example: rec = ('ACME', 100, 123.45)
Run Code Online (Sandbox Code Playgroud)
在同一部分,**dict提出:
from collections import namedtuple
Stock = namedtuple('Stock', ['name', 'shares', 'price', 'date', 'time'])
# Create a prototype instance
stock_prototype = Stock('', 0, 0.0, None, None)
# Function to convert a dictionary to a Stock
def dict_to_stock(s):
return stock_prototype._replace(**s)
Run Code Online (Sandbox Code Playgroud)
什么是**这里的功能?