特定格式字典的列表清单

问题描述 投票:0回答:1

我有一个这样的列表:

l=[['a','b'],['c','d'],['a','b','c']....]

我希望将其转换为以下格式的字典:

[{
            'data': {'id': 'one', 'label': 'a'},

        },
        {
            'data': {'id': 'two', 'label': 'b'},

        },
{
            'data': {'id': 'three', 'label': 'c'},

        },
        {
            'data': {'id': 'four', 'label': 'd'},

        }]

我最初尝试过以下代码:

dict_list = { i : len(l) for i in l }

我遇到以下错误:

TypeError: unhashable type: 'list'
python-3.x dataframe plotly-dash cytoscape.js cytoscape
1个回答
0
投票
您收到的错误是由于您试图将list设置为字典键的事实。下面的示例将重现相同的结果:

>>> d = dict() >>> d[['a', 'b']] = 123 Traceback (most recent call last): File "<pyshell#18>", line 1, in <module> d[['a', 'b']] = 123 TypeError: unhashable type: 'list'

让它起作用,不会创建您希望获得的预期列表。结果将是这样的:

{ ['a','b']: 2, ['c','d']: 2, ['a','b','c']: 3 }


为了获得所需列表,您需要创建一个

嵌套循环(本机解决方案)。

import inflect p = inflect.engine() l=[['a','b'],['c','d'],['a','b','c']] new_list = list() count = 1 already_used_labels = set() # The nested loop... for inner_list in l: for label in inner_list: if label in already_used_labels: continue new_list.append({'data': {'id': p.number_to_words(count), 'label': label}}) count += 1 already_used_labels.add(label)
这将导致:

[ {'data': {'id': 'one', 'label': 'a'}}, {'data': {'id': 'two', 'label': 'b'}}, {'data': {'id': 'three', 'label': 'c'}}, {'data': {'id': 'four', 'label': 'd'}} ]

P.S

有关how to convert integers into wordsinflect程序包的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.