我正在尝试编写一个将字典转换为列表的函数(将字典键作为列表中的第一个值),并将列表转换回字典。 例如,给定
dict1 = {'a':[1,2], 'b':[3], 'c':[4,5]},
该函数应该返回一个答案:
[['a', 1, 2], ['c', 4, 5], ['b', 3]].
或者,如果输入是
lst1 = [['a', 1, 2], ['c', 4, 5], ['b', 3]],
然后该函数应该返回:
{'a':[1,2], 'b':[3], 'c':[4,5]}
我写了以下代码。除了一个问题,它正在做它应该做的事情。如果输入是字典,则返回
[['a', [1, 2]], ['c', [4, 5]], ['b', [3]]] (a nested list) instead of
[['a', 1, 2], ['c', 4, 5], ['b', 3]].
我的功能代码:
def convertDL(value1):
if type(value1) == dict:
scoreList = []
for key, value in value1.items():
temp = [key, value]
scoreList.append(temp)
return scoreList
if type(value1) == list:
scoreDict = {}
i = 0
for item in value1:
scoreDict[value1[i][0]] = value1[i][1:]
i = i +1
return scoreDict
convertDL(lst1)
答案 0 :(得分:2)
列表理解和字典理解为你做的工作:
lst1 = [[k] + v for k, v in dct1.iteritems()]
和
dct1 = {v[0]: v[1:] for v in lst1}
或作为功能:
def convertDL(val):
if isinstance(val, dict):
return [[k] + v for k, v in val.iteritems()]
return {v[0]: v[1:] for v in val}
如果您使用的是Python 3,请使用.items()
代替.iteritems()
。
演示:
>>> def convertDL(val):
... if isinstance(val, dict):
... return [[k] + v for k, v in val.iteritems()]
... return {v[0]: v[1:] for v in val}
...
>>> convertDL({'a':[1,2], 'b':[3], 'c':[4,5]})
[['a', 1, 2], ['c', 4, 5], ['b', 3]]
>>> convertDL([['a', 1, 2], ['c', 4, 5], ['b', 3]])
{'a': [1, 2], 'c': [4, 5], 'b': [3]}