我有一个这样的列表:
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'
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 words(inflect程序包的更多信息。