将嵌套列表转换为字典 | Python
Converting nested List to Dictionary | Python
我制作了一个可以生成模拟指纹数据的list comprehension
。
import random
val = [[hand, [digit, [[random.randint(1, 250) for i in range(0, 8)] for j in range(0, 4)]]] for hand in ['Left', 'Right'] for digit in ['Thumb', 'Index', 'Middle', 'Ring', 'Little']]
val
>>> [['Left',
['Thumb',
[[247, 115, 74, 161, 47, 31, 231, 34],
[246, 52, 1, 160, 196, 65, 4, 118],
[128, 219, 128, 140, 207, 2, 156, 226],
[127, 61, 56, 151, 169, 122, 117, 105]]]]
...
['Right',
['Thumb',
[[229, 222, 138, 230, 86, 119, 201, 209],
[106, 238, 191, 15, 214, 134, 77, 145],
[186, 174, 81, 143, 138, 5, 54, 148],
[176, 85, 205, 235, 228, 204, 91, 17]]]]
注意:“数字”表示手指名称。
基于此列表输出,我想将其转换为以下结构的字典。
我无法制作出能够产生所需输出的 dictionary comprehension
:
{
"Left":
{
"Thumb": [...],
"Index": [...],
"Middle": [...],
"Ring": [...],
"Little": [...]
},
"Right":
{
"Thumb": [...],
"Index": [...],
"Middle": [...],
"Ring": [...],
"Little": [...]
}
}
注意:我理解我上面的字典“输出”有些不正确。
我正在使用 Jupyter Notebooks
。最佳尝试:
output = {hand: {digit: matrix for i in val for hand in val[i] for digit in hand}}
output
>>> ---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-46-500095a8cf85> in <module>
----> 1 output = {hand: {digit: matrix for i in val for hand in val[i] for digit in hand}}
2 output
NameError: name 'hand' is not defined
您可以通过 dict
理解直接创建结构。
import random
output = {
hand: {
digit: [
random.randint(1, 250) for _ in range(0, 8)
] for digit in ['Thumb', 'Index', 'Middle', 'Ring', 'Little']
} for hand in ['Left', 'Right']
}
print(output)
嵌套理解的诀窍是首先创建最内层的结构,然后从那里向外工作。
所以创造你的内心 list
,
inner = [random.randint(1, 250) for _ in range(0, 8)]
然后是你的 dict
位数。
digits = {digit: inner for digit in ['Thumb', 'Index', 'Middle', 'Ring', 'Little']}
最后是你的 dict
双手。
hands = {hand: digits for hand in ['Left', 'Right']}
将所有这些组合在一起,你就得到了。
{
hand: {
digit: [
random.randint(1, 250) for _ in range(0, 8)
] for digit in ['Thumb', 'Index', 'Middle', 'Ring', 'Little']
} for hand in ['Left', 'Right']
}
我制作了一个可以生成模拟指纹数据的list comprehension
。
import random
val = [[hand, [digit, [[random.randint(1, 250) for i in range(0, 8)] for j in range(0, 4)]]] for hand in ['Left', 'Right'] for digit in ['Thumb', 'Index', 'Middle', 'Ring', 'Little']]
val
>>> [['Left',
['Thumb',
[[247, 115, 74, 161, 47, 31, 231, 34],
[246, 52, 1, 160, 196, 65, 4, 118],
[128, 219, 128, 140, 207, 2, 156, 226],
[127, 61, 56, 151, 169, 122, 117, 105]]]]
...
['Right',
['Thumb',
[[229, 222, 138, 230, 86, 119, 201, 209],
[106, 238, 191, 15, 214, 134, 77, 145],
[186, 174, 81, 143, 138, 5, 54, 148],
[176, 85, 205, 235, 228, 204, 91, 17]]]]
注意:“数字”表示手指名称。
基于此列表输出,我想将其转换为以下结构的字典。
我无法制作出能够产生所需输出的 dictionary comprehension
:
{
"Left":
{
"Thumb": [...],
"Index": [...],
"Middle": [...],
"Ring": [...],
"Little": [...]
},
"Right":
{
"Thumb": [...],
"Index": [...],
"Middle": [...],
"Ring": [...],
"Little": [...]
}
}
注意:我理解我上面的字典“输出”有些不正确。
我正在使用 Jupyter Notebooks
。最佳尝试:
output = {hand: {digit: matrix for i in val for hand in val[i] for digit in hand}}
output
>>> ---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-46-500095a8cf85> in <module>
----> 1 output = {hand: {digit: matrix for i in val for hand in val[i] for digit in hand}}
2 output
NameError: name 'hand' is not defined
您可以通过 dict
理解直接创建结构。
import random
output = {
hand: {
digit: [
random.randint(1, 250) for _ in range(0, 8)
] for digit in ['Thumb', 'Index', 'Middle', 'Ring', 'Little']
} for hand in ['Left', 'Right']
}
print(output)
嵌套理解的诀窍是首先创建最内层的结构,然后从那里向外工作。
所以创造你的内心 list
,
inner = [random.randint(1, 250) for _ in range(0, 8)]
然后是你的 dict
位数。
digits = {digit: inner for digit in ['Thumb', 'Index', 'Middle', 'Ring', 'Little']}
最后是你的 dict
双手。
hands = {hand: digits for hand in ['Left', 'Right']}
将所有这些组合在一起,你就得到了。
{
hand: {
digit: [
random.randint(1, 250) for _ in range(0, 8)
] for digit in ['Thumb', 'Index', 'Middle', 'Ring', 'Little']
} for hand in ['Left', 'Right']
}