Python-根据2个列表中的递增值添加到字典中

Nun*_*hux 5 python dictionary list increment

我有2个已创建的列表,并为每个项目添加了递增值.原因是每个列表中的值将在字典中连接在一起.但是,每个列表中的值不是1对1对.这就是为什么我添加了递增值以帮助将每个键与其对应的值相关联.

以下是我列表中的一些示例数据:

list_a = ['abc|1','bcd|2','cde|3']
list_b = ['1234|1','2345|2','3456|2','4567|2','5678|3']
Run Code Online (Sandbox Code Playgroud)

理想情况下,我要做的是运行两个列表,然后根据递增值生成基于配对的字典.我猜测适用的值必须是一个列表?

以下是理想的输出:

my_dict = {'abc|1':'1234|1','bcd|2':['2345|2','3456|2','4567|2'],'cde|3':'5678|3'}    
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,在此先感谢:)

Ste*_*ann 2

list_a = ['abc|1','bcd|2','cde|3']
list_b = ['1234|1','2345|2','3456|2','4567|2','5678|3']

tmp = {k.split('|')[1]: (k, []) for k in list_a}
for v in list_b:
    tmp[v.split('|')[1]][1].append(v)
my_dict = dict(tmp.values())
Run Code Online (Sandbox Code Playgroud)

接近您发布的目标,但我认为实际上更好。

goal: {'abc|1':  '1234|1',  'bcd|2': ['2345|2', '3456|2', '4567|2'], 'cde|3':  '5678|3' }
mine: {'abc|1': ['1234|1'], 'bcd|2': ['2345|2', '3456|2', '4567|2'], 'cde|3': ['5678|3']}
Run Code Online (Sandbox Code Playgroud)

您可以看到我们的区别只是将单身人士(我)或不(您)放入列表中。我认为我的方法更好的原因是,如果所有值都是列表,则使用此结果的任何代码可能会更容易,因此它不需要处理单个字符串和字符串列表。就像我只制作列表更容易一样。

但如果您仍然喜欢自己的方式,请将我上面的最后一行更改为:

my_dict = {k: v if len(v) > 1 else v[0] for k, v in tmp.values()}
Run Code Online (Sandbox Code Playgroud)