相关疑难解决方法(0)

在Python中创建一个包含列表推导的字典

我喜欢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

1216
推荐指数
12
解决办法
80万
查看次数

使用列表推导仅仅是副作用是Pythonic吗?

想想我正在调用它的副作用的函数,而不是返回值(比如打印到屏幕,更新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)

哪个更好?为什么?

python list-comprehension

97
推荐指数
4
解决办法
8534
查看次数

在列表的每个字典中添加一个元素(列表理解)

我有一个字典列表,并希望为此列表的每个元素添加一个键.我试过了:

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)

返回语法错误.

python list-comprehension python-3.x

29
推荐指数
6
解决办法
4万
查看次数

*tuple和**dict在Python中意味着什么?

正如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)

什么是**这里的功能?

python tuples namedtuple python-3.x iterable-unpacking

18
推荐指数
1
解决办法
2万
查看次数