我有这本词典:
n ={'b': [['a'], ['c']], 'a': [['c', 'b'], ['c']], 'c': [['b']]}
并要求输出以下内容:
n ={'b': ['a', 'c'], 'a': ['c', 'b'], 'c': ['b']}
我尝试使用itertools
和join
,但无法让它发挥作用,任何人都可以帮忙吗?
答案 0 :(得分:3)
只需使用itertools
中的chain.from_iterable
来组合这些:
from itertools import chain
from_it = chain.from_iterable
{k: list(from_it(i)) for k, i in n.items()}
如果您需要列表中的唯一值(根据您没有的标题),您还可以将from_it
的结果包装在set
中。
答案 1 :(得分:0)
我会迭代dict并忽略不相关的列表。
对于唯一性,您可以将每个inner_list转换为set
n ={'b': [['a', 'b'], ['c']], 'a': [['c', 'b'], ['c']], 'c': [['b']]}
new_n = {}
for k,v in n.items():
n[k] = [inner_item for item in v for inner_item in item]
print (n)
答案 2 :(得分:0)
你可以试试这个:
from itertools import chain
n ={'b': [['a'], ['c']], 'a': [['c', 'b'], ['c']], 'c': [['b']]}
new_n = {a:list(set(chain(*[i[0] if len(i) == 1 else i for i in b]))) for a, b in n.items()}
输出:
{'a': ['c', 'b'], 'c': ['b'], 'b': ['a', 'c']}
答案 3 :(得分:0)
sum
的解决方案:
>>> {k: sum(v, []) for k, v in n.items()}
{'a': ['c', 'b', 'c'], 'b': ['a', 'c'], 'c': ['b']}
sum(iterable, start=0, /)
返回'start'值的总和(默认值:0)加上可迭代的数字
因此,使用空列表作为起始值有效。
使用set
>>> {k: list(set(sum(v, []))) for k, v in n.items()}
{'a': ['c', 'b'], 'b': ['a', 'c'], 'c': ['b']}
答案 4 :(得分:0)
对此的单线解决方案(并且不推荐)是:
{key: list(set([item for subarr in value for item in subarr])) for key, value in n.items()}
虽然阅读起来要难得多。如果你真的不想导入任何东西,你可以写一个辅助函数。
def flat_and_unique_list(list_of_lists):
return list(set([item for sub_list in list_of_lists for item in sub_list]))
{key: flat_and_unique_list(value) for key, value in n.items()}