如何从列表列表创建嵌套字典
How to create a nested dictionary from a list of lists
我想从列表列表中创建一个嵌套字典。
输入:
[[a, b, c], [1, 'a', 'x'], [2, 'b', 'y']]
主字典必须有索引作为键。第一个列表包含要作为键传递给嵌套字典的项,以下列表包含要作为值传递的项:
期望输出:
{0: {a:1, b:'a', c:'x'},
1: {a:2, b:'b', c:'y'}}
我尝试了以下代码,但它没有 return 每个项目都作为嵌套字典:
output = {a[0]: list(a[1:]) for a in zip(*rows)}
如有任何帮助,我们将不胜感激。谢谢
这是一个您可以尝试的解决方案,
print({
k: v for k, v in enumerate(dict(zip(val[0], v)) for v in val[1:])
})
{0: {'a': 1, 'b': 'a', 'c': 'x'}, 1: {'a': 2, 'b': 'b', 'c': 'y'}}
为什么不试试:
>>> {i: {x: y for x, y in zip(lst[0], v)} for i, v in enumerate(lst[1:])}
{0: {'a': 1, 'b': 'a', 'c': 'x'}, 1: {'a': 2, 'b': 'b', 'c': 'y'}}
>>>
或者简单地说:
>>> {i: dict(zip(lst[0], v)) for i, v in enumerate(lst[1:])}
{0: {'a': 1, 'b': 'a', 'c': 'x'}, 1: {'a': 2, 'b': 'b', 'c': 'y'}}
>>>
兄弟试试这个
dictionary ={j: dict(zip(lst[0], i)) for j, i in enumerate(lst[1:])}
print(dictionary)
尝试
l = [['a', 'b', 'c'], [1, 'a', 'x'], [2, 'b', 'y']]
{
i: dict(zip(l[0], v)) for i, v in enumerate(l[1:])
}
找到一种使用叉积的有趣方法
import itertools
l = [['a', 'b', 'c'], [1, 'a', 'x'], [2, 'b', 'y']]
keys = l[:1]
values_list = l[1:]
# {0: {'a': 1, 'b': 'a', 'c': 'x'}, 1: {'a': 2, 'b': 'b', 'c': 'y'}}
dict(
# [(0, {'a': 1, 'b': 'a', 'c': 'x'}), (1, {'a': 2, 'b': 'b', 'c': 'y'})]
enumerate(
# [{'a': 1, 'b': 'a', 'c': 'x'}, {'a': 2, 'b': 'b', 'c': 'y'}]
map(
lambda x: dict(zip(*x)),
itertools.product(keys, values_list) # [(['a', 'b', 'c'], [1, 'a', 'x']), (['a', 'b', 'c'], [2, 'b', 'y'])]
)
)
)
我想从列表列表中创建一个嵌套字典。
输入:
[[a, b, c], [1, 'a', 'x'], [2, 'b', 'y']]
主字典必须有索引作为键。第一个列表包含要作为键传递给嵌套字典的项,以下列表包含要作为值传递的项:
期望输出:
{0: {a:1, b:'a', c:'x'},
1: {a:2, b:'b', c:'y'}}
我尝试了以下代码,但它没有 return 每个项目都作为嵌套字典:
output = {a[0]: list(a[1:]) for a in zip(*rows)}
如有任何帮助,我们将不胜感激。谢谢
这是一个您可以尝试的解决方案,
print({
k: v for k, v in enumerate(dict(zip(val[0], v)) for v in val[1:])
})
{0: {'a': 1, 'b': 'a', 'c': 'x'}, 1: {'a': 2, 'b': 'b', 'c': 'y'}}
为什么不试试:
>>> {i: {x: y for x, y in zip(lst[0], v)} for i, v in enumerate(lst[1:])}
{0: {'a': 1, 'b': 'a', 'c': 'x'}, 1: {'a': 2, 'b': 'b', 'c': 'y'}}
>>>
或者简单地说:
>>> {i: dict(zip(lst[0], v)) for i, v in enumerate(lst[1:])}
{0: {'a': 1, 'b': 'a', 'c': 'x'}, 1: {'a': 2, 'b': 'b', 'c': 'y'}}
>>>
兄弟试试这个
dictionary ={j: dict(zip(lst[0], i)) for j, i in enumerate(lst[1:])}
print(dictionary)
尝试
l = [['a', 'b', 'c'], [1, 'a', 'x'], [2, 'b', 'y']]
{
i: dict(zip(l[0], v)) for i, v in enumerate(l[1:])
}
找到一种使用叉积的有趣方法
import itertools
l = [['a', 'b', 'c'], [1, 'a', 'x'], [2, 'b', 'y']]
keys = l[:1]
values_list = l[1:]
# {0: {'a': 1, 'b': 'a', 'c': 'x'}, 1: {'a': 2, 'b': 'b', 'c': 'y'}}
dict(
# [(0, {'a': 1, 'b': 'a', 'c': 'x'}), (1, {'a': 2, 'b': 'b', 'c': 'y'})]
enumerate(
# [{'a': 1, 'b': 'a', 'c': 'x'}, {'a': 2, 'b': 'b', 'c': 'y'}]
map(
lambda x: dict(zip(*x)),
itertools.product(keys, values_list) # [(['a', 'b', 'c'], [1, 'a', 'x']), (['a', 'b', 'c'], [2, 'b', 'y'])]
)
)
)