Python字典重复键仅返回单个值:如何获取指定键全部值?
解决Python字典重复键值提取问题
嘿,这个问题我太熟了!你遇到的核心问题是Python的普通字典不允许重复键——当你像这样连续给同一个键'A'赋值时,后面的值会直接覆盖前面的,所以你的x_table最后其实只有{'A': 'GCG'}这一组键值对,自然只能拿到最后那个值啦。另外你代码里的AA_list = [{'A'}]是包含集合的列表,而字典的键是字符串'A',所以aa in x_table的判断其实永远不成立,这也是个小坑哦。
下面给你几个实用的解决方案:
方案1:手动构建值为列表的字典
如果你的键值对是固定的,直接把同一个键对应的所有值放到一个列表里:
# 把同一个键的所有值存为列表 x_table = {'A': ['GCT', 'GCC', 'GCA', 'GCG']} # 修正AA_list为字符串列表,而不是集合列表 AA_list = ['A'] for aa in AA_list: if aa in x_table: # 打印整个值列表 print(x_table[aa]) # 如果想要逐个打印每个值,可以再加一层循环 for val in x_table[aa]: print(val)
方案2:动态收集重复键的值(用defaultdict)
如果你的键值对是从数据源动态获取的(比如文件、接口返回),可以用collections.defaultdict来自动帮你收集同一个键的所有值:
from collections import defaultdict # 假设这是你从其他地方拿到的原始键值对数据 raw_data = [('A', 'GCT'), ('A', 'GCC'), ('A', 'GCA'), ('A', 'GCG')] # 初始化一个默认值为列表的字典 x_table = defaultdict(list) # 遍历原始数据,把值逐个添加到对应键的列表里 for key, value in raw_data: x_table[key].append(value) # 提取指定键的值 AA_list = ['A'] for aa in AA_list: if aa in x_table: print(x_table[aa]) # 输出: ['GCT', 'GCC', 'GCA', 'GCG']
方案3:用普通字典手动实现收集
要是不想引入额外的模块,用普通字典也能实现相同的效果:
raw_data = [('A', 'GCT'), ('A', 'GCC'), ('A', 'GCA'), ('A', 'GCG')] x_table = {} for key, value in raw_data: # 如果键不在字典里,先初始化一个空列表 if key not in x_table: x_table[key] = [] # 把值添加到列表中 x_table[key].append(value) # 提取逻辑和之前一致 AA_list = ['A'] for aa in AA_list: if aa in x_table: print(x_table[aa])
内容的提问来源于stack exchange,提问作者dk09
相关产品推荐
相关产品推荐

