Python中如何从列表内的字典获取值?以及如何将列表内字典的键值分配给不同变量(寻找替代for循环的全局赋值更优方案)
嘿,我来帮你搞定这两个Python问题!
问题1:如何在Python中从包含字典的列表里获取值?
这其实分两种场景,根据列表里字典的数量来选最优方法:
如果列表只有一个字典(比如你给出的示例
data = [{'country':[1,'US']}]):直接通过列表索引+字典键就能快速取值,完全不用循环:data = [{'country':[1,'US']}] # 获取字典里"country"对应的值 country_data = data[0]['country'] print(country_data) # 输出: [1, 'US'] # 进一步拆分里面的元素 rank = country_data[0] country_name = country_data[1]如果列表有多个字典:遍历列表里的每个字典,再按键取值即可:
data = [{'country':[1,'US']}, {'country':[2,'CN']}] for item in data: country_data = item['country'] print(f"排名:{country_data[0]}, 国家:{country_data[1]}")
问题2:如何将列表内字典的键和值分配给不同的变量(更优方法+全局赋值)?
先提个小细节:你当前的代码里有个小错误——country = j[1][0]应该改成j[1][1],不然rank和country会取到同一个值(都是1)哦。
回到你的需求:如果列表里只有一个字典(像示例那样),完全不需要嵌套循环,直接提取赋值更高效。如果需要全局赋值,可以直接在全局作用域里赋值,或者用globals()函数(适合在函数内部给全局变量赋值的场景)。
方法1:直接提取(适合单个字典的场景)
data = [{'country':[1,'US']}] # 取出列表里唯一的字典 target_dict = data[0] # 获取键名和对应的值列表(因为只有一个键,用next+iter快速获取) key_name = next(iter(target_dict.keys())) rank, country_name = target_dict[key_name] # 解包值列表到两个变量 # 全局赋值(脚本顶层直接定义的变量本身就是全局的) type_var = key_name rank_var = rank country_var = country_name print(type_var) # 输出: country print(rank_var) # 输出: 1 print(country_var)# 输出: US
方法2:用globals()实现全局赋值(适合函数内操作)
如果是在函数里想把变量变成全局可访问的,可以这样写:
def assign_global_vars(): data = [{'country':[1,'US']}] target_dict = data[0] key_name = next(iter(target_dict.keys())) rank, country_name = target_dict[key_name] # 把变量注入全局作用域 globals()['type'] = key_name globals()['rank'] = rank globals()['country'] = country_name assign_global_vars() # 在函数外也能访问这些全局变量 print(type) # 输出: country print(rank) # 输出: 1 print(country) # 输出: US
补充:如果列表有多个字典
如果列表里有多个字典,不建议用全局变量存同名值(会覆盖),可以把变量存到列表或其他结构里:
data = [{'country':[1,'US']}, {'city':[3,'NY']}] type_list = [] rank_list = [] value_list = [] for item in data: key, values = next(iter(item.items())) type_list.append(key) rank_list.append(values[0]) value_list.append(values[1]) print(type_list) # 输出: ['country', 'city'] print(rank_list) # 输出: [1, 3] print(value_list) # 输出: ['US', 'NY']
内容的提问来源于stack exchange,提问作者swarna
相关产品推荐
相关产品推荐

