Python中列表内字典随机抽取后如何获取键或值?
在Python中从列表的随机字典中获取键或值的方法
首先指出你当前代码的问题:random.sample(card,4)返回的是包含4个字典的列表,所以直接调用table.key()肯定会报错——列表根本没有key()方法。你得先遍历这个列表里的每个字典,再对单个字典做操作。
回到你的核心问题:
- 当然可以只获取字典的键或值,有多种方式;
- 不用
keys()也能直接通过字典变量获取键,甚至更简洁。
一、获取字典键的几种直接方式
- 直接把字典转成列表:字典本身是可迭代对象,默认迭代的就是键,所以
list(your_dict)就能得到所有键的列表,效果和list(your_dict.keys())完全一样。 - 迭代字典:用
for key in your_dict:就能逐个拿到每个键,不需要调用任何方法。 - 取单个特定键对应的值:如果你知道键的名称,直接用
your_dict['SPADE']这种索引方式就能拿到对应值,这是最直接的调用方式。
二、获取字典值的几种方式
- 用
values()方法:list(your_dict.values())能得到所有值的列表; - 通过键索引:还是用
your_dict[key],比如你的字典里SPADE_A['SPADE']就能拿到值'CARD'; - 同时拿键和值:用
for key, value in your_dict.items():可以一次获取键值对,处理起来更灵活。
三、修改后的可运行代码
下面是针对你的场景调整后的代码,随机抽4张牌后,分别输出每张牌的键、值,以及具体的花色和数字信息:
import random SPADE_A = {'SPADE':'CARD','A':'NUM'} HEART_A = {'HEART':'CARD','A':'NUM'} CLUB_A = {'CLUB':'CARD','A':'NUM'} DIAMOND_A ={'DIAMOND':'CARD','A':'NUM'} SPADE_2 = {'SPADE':'CARD',2:'NUM'} HEART_2 = {'HEART':'CARD',2:'NUM'} CLUB_2 = {'CLUB':'CARD',2:'NUM'} DIAMOND_2 = {'DIAMOND':'CARD',2:'NUM'} SPADE_3 = {'SPADE':'CARD',3:'NUM'} HEART_3 = {'HEART':'CARD',3:'NUM'} CLUB_3 = {'CLUB':'CARD', 3:'NUM'} DIAMOND_3 = {'DIAMOND':'CARD',3:'NUM'} card = [SPADE_A,HEART_A,DIAMOND_A,CLUB_A,SPADE_2,HEART_2,DIAMOND_2,CLUB_2, SPADE_3,HEART_3,DIAMOND_3,CLUB_3] # 随机抽取4张牌,得到字典列表 table = random.sample(card,4) # 遍历每张牌处理 for i, card_dict in enumerate(table, 1): print(f"第{i}张牌:") # 直接获取所有键(不用keys()) print(f"所有键:{list(card_dict)}") # 获取所有值 print(f"所有值:{list(card_dict.values())}") # 提取花色和数字信息 suit_key = next(k for k in card_dict if k in ['SPADE','HEART','CLUB','DIAMOND']) num_key = next(k for k in card_dict if k not in ['SPADE','HEART','CLUB','DIAMOND']) print(f"花色:{suit_key},类型:{card_dict[suit_key]};数字:{num_key},类型:{card_dict[num_key]}") print("---")
补充说明
如果你觉得list(card_dict)这种“直接调用”还不够直观,其实Python字典的设计已经把键的访问做的很简洁了——不需要额外的方法调用,直接迭代或转列表就能拿到键。如果是想获取单个值,直接用键索引是最直接的方式,没有更“直接”的语法了。
内容的提问来源于stack exchange,提问作者하루시카
相关产品推荐
相关产品推荐

