Python中提取嵌套列表公共值及TypeError报错解决
解决获取list1和list2公共值的问题
咱们先拆解下你遇到的问题,再一步步修正代码:
问题根源
- 列表索引错误:你的
a是一个包含两个字典的列表,不能直接用字典的键(比如你写的list_2015)去索引列表,得先通过整数索引拿到对应的字典,再取键对应的值。 - 数据格式问题:每个字典的value是一个包含单个逗号分隔字符串的列表(比如
['35,36,...']),不是直接的数字列表,没法直接转集合求交集,得先把字符串拆分并转成整数。
修正后的代码
# 原始数据 a = [{'list1': ['35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52']}, {'list2': ['1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52']}] # 提取并处理list1的数字集合 list1_nums = set(int(num) for num in a[0]['list1'][0].split(',')) # 提取并处理list2的数字集合 list2_nums = set(int(num) for num in a[1]['list2'][0].split(',')) # 求交集 common_values = list1_nums.intersection(list2_nums) print(common_values)
运行结果
{35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52}
代码解释
a[0]['list1'][0]:先通过a[0]拿到第一个字典,再用['list1']取到包含字符串的列表,最后[0]取出里面的逗号分隔字符串。split(','):把字符串按逗号拆分成单个数字字符串的列表。int(num):将每个字符串转成整数,再用生成器表达式转成集合。intersection():求两个集合的公共元素,就是你要的结果。
内容的提问来源于stack exchange,提问作者Alok
相关产品推荐
相关产品推荐

