如何在 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)
我正在尝试从 .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)