以列表作为值的字典
Dictionary with a list as value
我有一个元组列表:
res=[(0, 0, 255, 0, 0),(1, 0, 255, 0, 0),(0, 1, 255, 0, 0),(1, 1, 255, 0, 0),
(4, 4, 0, 255, 0),(5, 4, 0, 255, 0),(4, 5, 0, 255, 0),(5, 5, 0, 255, 0)]
这是我的想法:
keys = [l[2:] for l in res]
values = [l[:2] for l in res]
d=dict(zip(keys, values))
这是我的输出:
{(255, 0, 0): (1, 1), (0, 255, 0): (5, 5)}
我的输出是错误的,我需要这个:
{(255, 0, 0): [(0, 0),(1,0),(0,1),(1,1)],
(0, 255, 0): [(4,4),(5,4),(4,5),(5,5)]}
有什么想法吗?
您可以使用带有 .setdefault()
的字典来累积结果,使用切片生成适当的键和值。
ans = {}
for entry in res:
ans.setdefault(entry[2:], []).append(entry[:2])
print(ans)
这输出:
{
(255, 0, 0): [(0, 0), (1, 0), (0, 1), (1, 1)],
(0, 255, 0): [(4, 4), (5, 4), (4, 5), (5, 5)]
}
from collections import defaultdict
out = defaultdict(list)
for t in res:
out[t[2:]].append(t[:2])
dict(out)
或者用古典词典:
out = {}
for t in res:
k = t[2:]
if k not in out:
out[k] = []
out[k].append(t[:2])
输出:
{(255, 0, 0): [(0, 0), (1, 0), (0, 1), (1, 1)],
(0, 255, 0): [(4, 4), (5, 4), (4, 5), (5, 5)]}
这个问题有很多更优雅的解决方案,但练习的重点(可能)是让你练习逻辑和控制流程,所以我将展示一个更 beginner-appropriate 的解决方案:
output = {}
for entry in res:
key, value = entry[2:], entry[:2]
if key not in output:
output[key] = []
output[key].append(value)
如前所述,collections.defaultdict(list)
是此类问题的主要候选对象。
我有一个元组列表:
res=[(0, 0, 255, 0, 0),(1, 0, 255, 0, 0),(0, 1, 255, 0, 0),(1, 1, 255, 0, 0),
(4, 4, 0, 255, 0),(5, 4, 0, 255, 0),(4, 5, 0, 255, 0),(5, 5, 0, 255, 0)]
这是我的想法:
keys = [l[2:] for l in res]
values = [l[:2] for l in res]
d=dict(zip(keys, values))
这是我的输出:
{(255, 0, 0): (1, 1), (0, 255, 0): (5, 5)}
我的输出是错误的,我需要这个:
{(255, 0, 0): [(0, 0),(1,0),(0,1),(1,1)],
(0, 255, 0): [(4,4),(5,4),(4,5),(5,5)]}
有什么想法吗?
您可以使用带有 .setdefault()
的字典来累积结果,使用切片生成适当的键和值。
ans = {}
for entry in res:
ans.setdefault(entry[2:], []).append(entry[:2])
print(ans)
这输出:
{
(255, 0, 0): [(0, 0), (1, 0), (0, 1), (1, 1)],
(0, 255, 0): [(4, 4), (5, 4), (4, 5), (5, 5)]
}
from collections import defaultdict
out = defaultdict(list)
for t in res:
out[t[2:]].append(t[:2])
dict(out)
或者用古典词典:
out = {}
for t in res:
k = t[2:]
if k not in out:
out[k] = []
out[k].append(t[:2])
输出:
{(255, 0, 0): [(0, 0), (1, 0), (0, 1), (1, 1)],
(0, 255, 0): [(4, 4), (5, 4), (4, 5), (5, 5)]}
这个问题有很多更优雅的解决方案,但练习的重点(可能)是让你练习逻辑和控制流程,所以我将展示一个更 beginner-appropriate 的解决方案:
output = {}
for entry in res:
key, value = entry[2:], entry[:2]
if key not in output:
output[key] = []
output[key].append(value)
如前所述,collections.defaultdict(list)
是此类问题的主要候选对象。