首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用混合键类型将python字典中的键从字符串转换为int类型

用混合键类型将python字典中的键从字符串转换为int类型
EN

Stack Overflow用户
提问于 2019-09-23 17:19:53
回答 2查看 644关注 0票数 0

考虑一下具有混合键类型的python字典:

代码语言:javascript
复制
chrDict = {'1':234,'12':45,'23':121,'2':117,'chX':12,'chY':32}

我想将字符串类型中的那些键转换为int类型,这是数字类型,其余的都保留下来。我期望的结果是:

代码语言:javascript
复制
chrDict = {1:234,12:45,23:121,2:117,'chX':12,'chY':32}

我尝试了以下几点:

代码语言:javascript
复制
chrDict.update((int(i),j) for i,j in chrDict.items())

这给了我一个错误:

代码语言:javascript
复制
TypeError: cannot convert dictionary update sequence element #0 to a 
sequence

然后我试着:

代码语言:javascript
复制
for i,j in chrDict.items():
    try:
        chrDict.update(int(x),y)
    except:
        pass

但是我得到的输出是不正确的,它不会改变:

代码语言:javascript
复制
{'1': 234, '12': 45, '23': 121, '2':117, 'chX': 12, 'chY': 32}

实际上,我希望这样做,这样以后排序就更容易了。目前,如果我尝试:

代码语言:javascript
复制
sorted(chrDict.items())

它给了我以下输出:

代码语言:javascript
复制
[('1', 234), ('12', 45), ('2', 117), ('23', 121), ('chX', 12), ('chY', 32)]

键值2应该在键值1之后,这是没有发生的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-23 17:22:47

使用字典理解和isdigit()检查实际上是数字的字符串:

代码语言:javascript
复制
{int(k) if k.isdigit() else k: v for k, v in chrDict.items()}

示例

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-09-23 17:52:38

看起来奥斯汀的帖子回答了你的具体问题。请注意,这将创建一个新的字典(而不是编辑当前的字典)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58067310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档