如何在 Python 中附加单个字典键 (1_key : [N_values]) 的值列表?

How can I append a list of values for single dictionary key (1_key : [N_values]) in Python?

我正在尝试从 .txt 文件在 Python 中生成一个{单键:[多值]}字典。

这是文本文件(制表符分隔),

A02.835.583.748      A02.880     0.818181818181818
A02.835.583.748      A02.513     0.818181818181818
A02.835.583.748      A01.378.800.750     0.636363636363636
A02.835.583      A02.880     0.863636363636364
A02.835.583      A02.513     0.863636363636364
A02.835.583      A01.378.800.750     0.681818181818182
A01.378.800.750      A02.880     0.727272727272727
A01.378.800.750      A02.513     0.727272727272727
A01.378.800.750      A01.378.800.750     1

同样,我使用 "defaultdict()" 函数,但不知何故我无法正确生成字典。我可以通过这个生成字典,但这很奇怪。所以,我从这本奇怪的字典中取出一个键。

print(anaDict.get('A02.835.583.748'))

输出:

['A02.880=0.818181818181818', [...], ['A02.513=0.818181818181818'], ['A01.378.800.750=0.636363636363636']]

然而,这本词典中的 [...] 实际上是以一种初始方式嵌套同一键的其他值。

我写的代码,

anaDict = defaultdict()
anaSet = set()
with open(f, 'r') as anaFile:
    if '148' in f:
        for line in anaFile:
            key = line.split('\t')[0].rstrip()
            conclusionVal = line.split('\t')[1].strip()
            simScore = line.split('\t')[2].strip()
            value = [conclusionVal + "=" + simScore]
            if key not in anaDict:
                print("Here it goes: " , key, value)
                anaDict[key] = value                    
            if key in anaDict:
                print("Different value: ", key, value)
                anaDict[key].append(value)

        print(anaDict.get('A02.835.583.748'))

我希望代码生成以下字典(显示为键值对)。

A02.835.583.748 : [A02.880 = 0.818181818181818 , A02.513 = 0.818181818181818,  A01.378.800.750 = 0.636363636363636]
A02.835.583 : [A02.880 = 0.863636363636364, A02.513 = 0.863636363636364, A01.378.800.750 = 0.681818181818182]
A01.378.800.750 : [A02.880 = 0.727272727272727, A02.513  = 0.727272727272727, A01.378.800.750 = 1]

我不知道我做错了什么。我会提供任何帮助或指导。

这行是你的问题:

anaDict[key].append(value)

当您使用 list#append 时,您会将参数完整地放入列表中。但是由于您传递的是一个列表,所以您是在列表中放置一个列表。您所描述的想要做的是附加参数列表中的所有值,而不是列表本身。您所要做的就是将 append 替换为 extend.

anaDict[key].extend(value)

然后你告诉解释器解压缩参数列表并附加每个值。

根据@mypetlion 的建议修改后的代码(有效)已更新。

anaDict = defaultdict()
anaSet = set()
#print(f)
with open(f, 'r') as anaFile:
    if '148' in f:
        for line in anaFile:
            key = line.split('\t')[0].rstrip()
            conclusionVal = line.split('\t')[1].strip()
            simScore = line.split('\t')[2].strip()
            value = [conclusionVal + "=" + simScore]
            if key not in anaDict:
                anaDict[key] = value
            if key in anaDict:
                anaDict[key].extend(value)