如何解决Python字典添加元素时字符串'10'被拆分的问题
问题:向扑克牌字典的列表值添加"10"时被拆分为"1"和"0"的修复方案
问题代码及输出
代码
suits = ['h', 'd', 's', 'c'] values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] cards = {"h" : [], 'd': [], 's': [], 'c': []} for suit in cards: for value in values: cards[suit] += value print(cards)
错误输出
{'h': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '1', '0', 'J', 'Q', 'K'], 'd': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '1', '0', 'J', 'Q', 'K'], 's': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '1', '0', 'J', 'Q', 'K'], 'c': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '1', '0', 'J', 'Q', 'K']}
问题原因
cards[suit] += value这行代码中,列表的+=操作会将右侧的可迭代对象(字符串属于可迭代对象)拆分为单个元素逐个追加。"10"作为字符串,会被拆成"1"和"0"两个独立元素加入列表。
修复方案
有两种简单的修复方式:
方式1:使用列表的append()方法
直接调用append()将整个value作为单个元素添加到列表中:
suits = ['h', 'd', 's', 'c'] values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] cards = {"h" : [], 'd': [], 's': [], 'c': []} for suit in cards: for value in values: cards[suit].append(value) # 替换为append方法 print(cards)
方式2:将value包装为列表后使用+=
把单个value放到列表里,这样+=会把整个列表的元素(即单个value)追加进去:
suits = ['h', 'd', 's', 'c'] values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] cards = {"h" : [], 'd': [], 's': [], 'c': []} for suit in cards: for value in values: cards[suit] += [value] # 将value包装为列表 print(cards)
正确输出
{'h': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'], 'd': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'], 's': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'], 'c': ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']}
内容的提问来源于stack exchange,提问作者Brad Richerson
相关产品推荐
相关产品推荐

