字典理解示例
Dictionary Comprehension example
我有一个集合,里面有n组素数(3):
>>> sets
{frozenset({3, 13, 23}), frozenset({17, 2, 13}),
frozenset({19, 2, 3}), frozenset({3, 29, 23}), frozenset({17, 11, 23}),
frozenset({17, 2, 19}), frozenset({11, 17, 3}), frozenset({17, 5, 7})}
我想用以下值创建字典:素数的三元组和键:三个素数的乘积。
这是我的尝试:
lists = [list(i) for i in sets]
products = [reduce(lambda x,y:x*y,i) for i in lists]
dictir = {x:y for x in products for y in sets}
但是 dictir 给了我错误的结果:
{897: frozenset({17, 5, 7}), 114: frozenset({17, 5, 7}), 595: frozenset({17, 5, 7}), 561: frozenset({17, 5, 7}), 646: frozenset({17, 5, 7}), 2001: frozenset({17, 5, 7}), 442: frozenset({17, 5, 7}), 4301: frozenset({17, 5, 7})}
你能帮我改正吗?
您进行了两次迭代并有效地创建了 lists
和 products
的笛卡尔积。
要按元素迭代多个序列,只需使用 zip
.
dictir = {x: y for x, y in zip(products, sets)}
当然你可以放弃所有中间变量并做简单的一行:
sets = {frozenset({3, 13, 23}), frozenset({17, 2, 13}),
frozenset({19, 2, 3}), frozenset({3, 29, 23}), frozenset({17, 11, 23}),
frozenset({17, 2, 19}), frozenset({11, 17, 3}), frozenset({17, 5, 7})}
dictir = {reduce(lambda x, y: x * y, s): s for s in sets}
您可以使用 zip()
,但另一种更有效的方法是:
import operator
tuples = ((reduce(operator.mul, i), i) for i in sets)
dictir = dict(tuples)
# Or as a 1 liner
dictir = {reduce(operator.mul, i): i for i in sets}
我想,你可以简单地使用它:
import operator
dictir = {reduce(operator.mul,numbers):numbers for value in sets}
我有一个集合,里面有n组素数(3):
>>> sets
{frozenset({3, 13, 23}), frozenset({17, 2, 13}),
frozenset({19, 2, 3}), frozenset({3, 29, 23}), frozenset({17, 11, 23}),
frozenset({17, 2, 19}), frozenset({11, 17, 3}), frozenset({17, 5, 7})}
我想用以下值创建字典:素数的三元组和键:三个素数的乘积。
这是我的尝试:
lists = [list(i) for i in sets]
products = [reduce(lambda x,y:x*y,i) for i in lists]
dictir = {x:y for x in products for y in sets}
但是 dictir 给了我错误的结果:
{897: frozenset({17, 5, 7}), 114: frozenset({17, 5, 7}), 595: frozenset({17, 5, 7}), 561: frozenset({17, 5, 7}), 646: frozenset({17, 5, 7}), 2001: frozenset({17, 5, 7}), 442: frozenset({17, 5, 7}), 4301: frozenset({17, 5, 7})}
你能帮我改正吗?
您进行了两次迭代并有效地创建了 lists
和 products
的笛卡尔积。
要按元素迭代多个序列,只需使用 zip
.
dictir = {x: y for x, y in zip(products, sets)}
当然你可以放弃所有中间变量并做简单的一行:
sets = {frozenset({3, 13, 23}), frozenset({17, 2, 13}),
frozenset({19, 2, 3}), frozenset({3, 29, 23}), frozenset({17, 11, 23}),
frozenset({17, 2, 19}), frozenset({11, 17, 3}), frozenset({17, 5, 7})}
dictir = {reduce(lambda x, y: x * y, s): s for s in sets}
您可以使用 zip()
,但另一种更有效的方法是:
import operator
tuples = ((reduce(operator.mul, i), i) for i in sets)
dictir = dict(tuples)
# Or as a 1 liner
dictir = {reduce(operator.mul, i): i for i in sets}
我想,你可以简单地使用它:
import operator
dictir = {reduce(operator.mul,numbers):numbers for value in sets}