how to change string values in dictionary to int values
我有一本字典,比如:
1 | {'Sun': {'Satellites': 'Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris', 'Orbital Radius': '0', 'Object': 'Sun', 'RootObject': 'Sun', 'Radius': '20890260'}, 'Earth': {'Period': '365.256363004', 'Satellites': 'Moon', 'Orbital Radius': '77098290', 'Radius': '63710.41000.0', 'Object': 'Earth'}, 'Moon': {'Period': '27.321582', 'Orbital Radius': '18128500', 'Radius': '1737000.10', 'Object': 'Moon'}} |
我想知道如何将数值改为int而不是字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def read_next_object(file): obj = {} for line in file: if not line.strip(): continue line = line.strip() key, val = line.split(":") if key in obj and key =="Object": yield obj obj = {} obj[key] = val yield obj planets = {} with open("smallsolar.txt", 'r') as f: for obj in read_next_object(f): planets[obj["Object"]] = obj print(planets) |
号
不要只是将值添加到字典
1 2 3 4 | if re.match('^[0-9.]+$',val): # If the value only contains digits or a . obj[key] = float(val) # Store it as a float not a string else: obj[key] = val # Else store as string |
注意:您需要导入python正则表达式模块
可能在这里浪费了一些
python教程
python数据类型
导入python模块
正则表达式howto with python
停止尝试"获取teh codez",开始尝试开发你的问题解决和编程能力,否则你只能做到这一步。
我怀疑这是基于你以前的问题。如果是这样的话,在你把"轨道半径"放进字典之前,你应该考虑去解释它的值。我在那篇文章上的回答实际上是为你做的:
1 2 3 4 5 6 7 8 9 | elif line.startswith('Orbital Radius'): # get the thing after the":". # This is the orbital radius of the planetary body. # We want to store that as an integer. So let's call int() on it rad = int(line.partition(":")[-1].strip()) # now, add the orbital radius as the value of the planetary body in"answer" answer[obj] = rad |
但是,如果您真的想在创建字典后处理字典中的数字,可以使用以下方法:
1 2 3 4 5 6 7 8 9 | def intify(d): for k in d: if isinstance(d[k], dict): intify(d[k]) elif isinstance(d[k], str): if d[k].strip().isdigit(): d[k] = int(d[k]) elif all(c.isdigit() or c=='.' for c in d[k].strip()) and d[k].count('.')==1: d[k] = float(d[k]) |
。
希望这有帮助
1 2 | s = '12345' num = int(s) //num is 12345 |
如果这是一个一级递归dict,如您的示例中所示,则可以使用:
1 2 3 4 5 6 | for i in the_dict: for j in the_dict[i]: try: the_dict[i][j] = int (the_dict[i][j]) except: pass |
号
如果它是任意递归的,则需要更复杂的递归函数。既然你的问题似乎与此无关,我就不举一个例子。