我的输入是一个字典,其值如下:
{0:' 205,3',1:' 0,110,18,49,8',10:' 11,73'}
不幸的是,您可以看到字典的值是字符串''。
我的预期结果有点像这样
[(0205),(0,3),(1,0),(1110),(1,18).....]
我的代码如下。
def generate_edges(newDict):
edges = []
for node in newDict:
for neighbour in newDict[node]:
if neighbour == ',':
continue
else:
edges.append((node, int(neighbour)))
print(edges)
return edges
问题在于,正如您所看到的,表示为数字的数字逐位减少,结果为:
[(0,2),(0,0),(0,5),(0,3),(1,0),(1,1),(1,1),(1,0).. ...]
我如何规避这个问题并将值作为整数而不是一位数?
答案 0 :(得分:0)
您可以使用collections.defaultdict
并创建defaultdict(list)
。
正如the docs中所述:
第一次遇到每个密钥时,它不在映射中;因此,使用
default_factory
函数自动创建一个条目,该函数返回一个空列表。然后list.append()
操作将值附加到新列表。
因此,您可以轻松构建所需的词典:
from collections import defaultdict
l = [(2009, 'abc'), (2010, 'dfg'), (2009, 'hfg'), (2011, 'kdi')]
result = defaultdict(list)
for pair in l:
result[pair[0]].append(pair[1])
print(result) # {2009: ['abc', 'hfg'], 2010: ['dfg'], 2011: ['kdi']}
您只需遍历列表中的每个元组并将其附加到字典中。
如果您想摆脱每个值中的[]
,可以使用str.join()
:
...
def join_lists(d: dict, sep: str=', ') -> dict:
return {key: sep.join(values) for key, values in d.items()}
print(join_lists(result_dict)) # {2009: 'abc, hfg', 2010: 'dfg', 2011: 'kdi'}
我实现了一个名为join_lists()
的函数,它接受一个字典作为第一个参数,一个可选的分隔符作为第二个参数(默认为", "
)。这些函数返回一个 new dict,它具有相同的键,但它的值是逗号分隔的。
答案 1 :(得分:0)
看起来你只想要键的第一个值,键是年份
所以这应该这样做
result = dict()
for year, value in your_list:
if year not in result:
result[year] = value
这当然会丢弃元组中第二个项目的后期出现。我没有看到你指定你想用它做什么