在具有混合键类型的 python 字典中将键从字符串转换为 int 类型



考虑一个混合键类型的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之后,而键值没有发生。

所以请给我一些建议来解决这个问题。有没有更好的方法来解决这个问题?

将字典理解与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}

看起来奥斯汀的帖子回答了您的特定查询。 请注意,这是创建一个新词典(而不是就地编辑当前词典(。

此外,Python 无法将int类型与str类型进行比较以对包含两种数据类型的列表进行排序(这将在 Python 3 中引发 TypeError ( - 因此,如果您的最终目标是拥有混合数据类型的排序列表(或创建您自己的自定义比较(,您可能希望考虑不同的方法。

相关内容

最新更新