考虑具有混合键类型的python字典:
chrDict = {'1':234,'12':45,'23':121,'2':117,'chX':12,'chY':32}
我想将字符串类型的那些键转换为数字的int类型,其余的保留。我期望的结果是:
chrDict = {1:234,12:45,23:121,2:117,'chX':12,'chY':32}
我尝试了以下操作:
chrDict.update((int(i),j) for i,j in chrDict.items())
这给了我错误:
TypeError: cannot convert dictionary update sequence element #0 to a
sequence
然后我尝试:
for i,j in chrDict.items():
try:
chrDict.update(int(x),y)
except:
pass
但是我得到的输出是不正确的,它不会改变:
{'1': 234, '12': 45, '23': 121, '2':117, 'chX': 12, 'chY': 32}
实际上,我希望这样做,以便以后更容易排序。目前,如果我尝试:
sorted(chrDict.items())
它给了我以下输出:
[('1', 234), ('12', 45), ('2', 117), ('23', 121), ('chX', 12), ('chY', 32)]
键值2
应该紧随键值1
之后才出现。
因此,请给我一些解决此问题的建议。有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
使用带有isdigit()
的字典理解来检查实际上是数字的字符串:
{int(k) if k.isdigit() else k: v for k, v in chrDict.items()}
示例:
chrDict = {'1':234,'12':45,'23':121,'2':117,'chX':12,'chY':32}
print({int(k) if k.isdigit() else k: v for k, v in chrDict.items()})
# {1: 234, 12: 45, 23: 121, 2: 117, 'chX': 12, 'chY': 32}
答案 1 :(得分:0)
似乎奥斯汀的帖子回答了您的特定查询。请注意,这是在创建新词典(而不是在当前位置编辑当前词典)。
此外,Python无法将类型 int 与类型 str 进行比较,以对包含两种数据类型的列表进行排序(这会在Python 3中引发TypeError)-因此,您可能希望如果您的最终目标是拥有混合数据类型的排序列表(或创建自己的自定义比较),则可以考虑采用另一种方法。