【问题标题】:Converting the value from string to integer in a nested dictionary在嵌套字典中将值从字符串转换为整数
【发布时间】:2012-11-24 04:59:10
【问题描述】:

我想将字典中的数字更改为 int 值,以便稍后在我的程序中使用。 到目前为止我有

import time
import math
x = 400
y = 300
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)                

scale=250/int(max([planets[x]["Orbital Radius"] for x in planets if "Orbital Radius" in planets[x]]))
print(scale)

输出是

{'Sun': {'Object': 'Sun', 'Satellites': 'Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris', 'Orbital Radius': '0', 'RootObject': 'Sun', 'Radius': '20890260'}, 'Moon': {'Object': 'Moon', 'Orbital Radius': '18128500', 'Period': '27.321582', 'Radius': '1737000.10'}, 'Earth': {'Object': 'Earth', 'Satellites': 'Moon', 'Orbital Radius': '77098290', 'Period': '365.256363004', 'Radius': '6371000.0'}}
3.2426140709476178e-06

我希望能够将 dict 中的数字转换为 int 以供进一步使用。非常感谢任何帮助。

【问题讨论】:

  • 与您上一个问题完全相同!您需要开始投票和接受!您从一个问题中获取代码并粘贴到下一个问题中......如果您真的尝试做一些学习,可能会有所帮助。

标签: python string dictionary python-3.x integer


【解决方案1】:

以克里斯的回答为基础,

>>> myDict = {'Sun': {'Object': 'Sun', 'Satellites': 'Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris', 'Orbital Radius': '0', 'RootObject': 'Sun', 'Radius': '20890260'}, 'Moon': {'Object': 'Moon', 'Orbital Radius': '18128500', 'Period': '27.321582', 'Radius': '1737000.10'}, 'Earth': {'Object': 'Earth', 'Satellites': 'Moon', 'Orbital Radius': '77098290', 'Period': '365.256363004', 'Radius': '6371000.0'}}
>>> for body in myDict:
...      myDict[body]['Radius'] = float(myDict[body]['Radius'])
...      myDict[body]['Orbital Radius'] = float(myDict[body]['Orbital Radius'])
>>> myDict
13: {'Earth': {'Object': 'Earth',
           'Orbital Radius': 77098290.0,
           'Period': '365.256363004',
           'Radius': 6371000.0,
           'Satellites': 'Moon'},
 'Moon': {'Object': 'Moon',
          'Orbital Radius': 18128500.0,
          'Period': '27.321582',
          'Radius': 1737000.1},
 'Sun': {'Object': 'Sun',
         'Orbital Radius': 0.0,
         'Radius': 20890260.0,
         'RootObject': 'Sun',
         'Satellites': 'Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris'}}

【讨论】:

  • 我在添加这行代码时有一个问题planets[body]['Period'] = float(planets[body]['Period'])
  • 将周期更改为浮点数我收到错误 KeyError: 'Period'
  • 那是因为Sun 没有Period 键。所以你必须写一个 if 语句。 if "Period" in myDict[body]:.
【解决方案2】:

你可以施放它们。对于某些值x,您可以使用int(x) 将其转换为整数。

我还注意到您的某些值是浮点值。如果您希望将它们保留为浮点值(带小数),您可以使用float(x)

【讨论】:

  • 我想迭代到 dict 而不创建任何新列表或 dicts 的工作方式
  • value_as_integer = int(planets["mykey"])
猜你喜欢
  • 2012-03-02
  • 2020-05-15
  • 1970-01-01
  • 2021-05-02
  • 2012-03-26
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
相关资源
最近更新 更多