在嵌套列表的字典理解中使用枚举
Using enumerate within a dictionary comprehension of a nested list
是否有一种 elegant/pythonic 方法可以从带有枚举的嵌套列表创建字典,它在子列表级别而不是列表列表级别枚举?
请考虑这个例子:
nested_list = [["ca", "at"], ["li", "if", "fe"], ["ca", "ar"]]
我尝试将其转换成如下所示的字典:
# Desired output.
# {'ca': 0, 'at': 1, 'li': 2, 'if': 3, 'fe': 4, 'ar': 5}
这是我最好的尝试,但它似乎在上层枚举列表并覆盖重复键的值 - 这是不可取的。
item_dict = {item: i for i, item in enumerate(nested_list) for item in item}
# Current output.
# {'ca': 2, 'at': 0, 'li': 1, 'if': 1, 'fe': 1, 'ar': 2}
我是否最好将此任务拆分为非嵌套步骤,然后是字典理解步骤?
感谢所有见解,谢谢。
使用itertools.chain
例如:
from itertools import chain
nested_list = [["ca", "at"], ["li", "if", "fe"], ["ca", "ar"]]
result = {}
c = 0
for i in chain.from_iterable(nested_list):
if i not in result:
result[i] = c
c += 1
print(result)
输出:
{'ca': 0, 'at': 1, 'li': 2, 'if': 3, 'fe': 4, 'ar': 5}
我想我已经解决了,但是它很难看...
{key: i for i, key in enumerate(set([item for item in nested_list for item in item]))}
# Output.
{'if': 0, 'at': 1, 'fe': 2, 'li': 3, 'ca': 4, 'ar': 5}
是否有一种 elegant/pythonic 方法可以从带有枚举的嵌套列表创建字典,它在子列表级别而不是列表列表级别枚举?
请考虑这个例子:
nested_list = [["ca", "at"], ["li", "if", "fe"], ["ca", "ar"]]
我尝试将其转换成如下所示的字典:
# Desired output.
# {'ca': 0, 'at': 1, 'li': 2, 'if': 3, 'fe': 4, 'ar': 5}
这是我最好的尝试,但它似乎在上层枚举列表并覆盖重复键的值 - 这是不可取的。
item_dict = {item: i for i, item in enumerate(nested_list) for item in item}
# Current output.
# {'ca': 2, 'at': 0, 'li': 1, 'if': 1, 'fe': 1, 'ar': 2}
我是否最好将此任务拆分为非嵌套步骤,然后是字典理解步骤?
感谢所有见解,谢谢。
使用itertools.chain
例如:
from itertools import chain
nested_list = [["ca", "at"], ["li", "if", "fe"], ["ca", "ar"]]
result = {}
c = 0
for i in chain.from_iterable(nested_list):
if i not in result:
result[i] = c
c += 1
print(result)
输出:
{'ca': 0, 'at': 1, 'li': 2, 'if': 3, 'fe': 4, 'ar': 5}
我想我已经解决了,但是它很难看...
{key: i for i, key in enumerate(set([item for item in nested_list for item in item]))}
# Output.
{'if': 0, 'at': 1, 'fe': 2, 'li': 3, 'ca': 4, 'ar': 5}