Sah*_*yar 6 python dictionary list python-3.x
我需要编写一个函数来接受代表每个人朋友的列表列表,并需要将其转换为字典.所以输入[['A','B'],['A','C'],['A','D'],['B','A'],['C','B'],['C','D'],['D','B'],['E']]应该返回{A:[B,C,D],B:[A],C:[B,D],D:[B],E:None}
输入:
[['A','B'],['A','C'],['A','D'],['B','A'],['C','B'],['C','D'],['D','B'],['E']]
Run Code Online (Sandbox Code Playgroud)
预期产出:
{A:[B,C,D],B:[A],C:[B,D],D:[B],E:None}
Run Code Online (Sandbox Code Playgroud)
目前我正在尝试以下方法:
s=[['A','B'],['A','C'],['A','D'],['B','A'],['C','B'],['C','D'],['D','B'],['E']]
output=dict.fromkeys((set([x[0] for x in s])),[ ])
for x in s:
if len(x)>1:
output[x[0]].append(x[1])
else:
output[x[0]].append(None)
Run Code Online (Sandbox Code Playgroud)
但是输出给了我每个键的所有值,而不是只返回相应的值
我得到的输出是:
{
'A': ['B', 'C', 'D', 'A', 'B', 'D', 'B', None],
'B': ['B', 'C', 'D', 'A', 'B', 'D', 'B', None],
'C': ['B', 'C', 'D', 'A', 'B', 'D', 'B', None],
'D': ['B', 'C', 'D', 'A', 'B', 'D', 'B', None],
'E': ['B', 'C', 'D', 'A', 'B', 'D', 'B', None]
}
Run Code Online (Sandbox Code Playgroud)
您可以迭代列表列表中的键值对,但将值解压为列表以适应可能缺少值的情况:
s = [['A','B'],['A','C'],['A','D'],['B','A'],['C','B'],['C','D'],['D','B'],['E']]
output = {}
for k, *v in s:
if v:
output.setdefault(k, []).extend(v)
else:
output[k] = None
Run Code Online (Sandbox Code Playgroud)
output变成:
{'A': ['B', 'C', 'D'], 'B': ['A'], 'C': ['B', 'D'], 'D': ['B'], 'E': None}
Run Code Online (Sandbox Code Playgroud)
或者,如果您不介意没有值的键得到一个空列表而不是None,您可以简单地执行以下操作:
output = {}
for k, *v in s:
output.setdefault(k, []).extend(v)
Run Code Online (Sandbox Code Playgroud)
output那么就会变成:
{'A': ['B', 'C', 'D'], 'B': ['A'], 'C': ['B', 'D'], 'D': ['B'], 'E': []}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |