Python:如何动态迭代dict对象?
我想将so数据写入文件,但数据可能因其来源而异 目前,我的代码只执行以下操作:Python:如何动态迭代dict对象?,python,loops,formatting,Python,Loops,Formatting,我想将so数据写入文件,但数据可能因其来源而异 目前,我的代码只执行以下操作: try: file.write('{value1}'.format(value1=data["value1"])) except: pass try: file.write('{value2}'.format(value2=data["value2"])) except: pass #... 由于输入数据的性质,这些值键可能存在,也可能不存在,因此为什么我要执行上述操作,所以当我
try:
file.write('{value1}'.format(value1=data["value1"]))
except:
pass
try:
file.write('{value2}'.format(value2=data["value2"]))
except:
pass
#...
由于输入数据的性质,这些值键可能存在,也可能不存在,因此为什么我要执行上述操作,所以当我得到一个键错误时,我可以忽略它
所以我的问题是,有没有更好的方法来实现上述目标?一种更“蟒蛇式”的方式,而不是这种非常湿的解决方案
示例_输入1:
'{"value1": 1.0, "value2": 1.2}'
示例_输入2:
'{"value2": 1.5}'
我想我最终应该标准化输入数据,但不幸的是,这是来自第三方API的,因此不是一个真正的选项。是的,您可以简单地使用:
for key in ('value1','value2'):
if key in data:
file.write('{}'.format(data[key]))
因此这里if key in data
首先检查字典中是否有键(例如'value1'
)。在这种情况下,我们使用file.write({}.format(data[key]))
将相应的值写入文件
使用for
循环的优点是,您还可以轻松地从文件中添加和删除要打印的密钥
另一方面,如果您希望写入词典中的所有键,您可以在词典中迭代:
for val in data.values():
file.write('{}'.format(val))
但是请注意,字典中键/值的顺序与插入顺序无关。因此可以对值进行无序排列。是的,您只需使用:
for key in ('value1','value2'):
if key in data:
file.write('{}'.format(data[key]))
因此这里if key in data
首先检查字典中是否有键(例如'value1'
)。在这种情况下,我们使用file.write({}.format(data[key]))
将相应的值写入文件
使用for
循环的优点是,您还可以轻松地从文件中添加和删除要打印的密钥
另一方面,如果您希望写入词典中的所有键,您可以在词典中迭代:
for val in data.values():
file.write('{}'.format(val))
但是请注意,字典中键/值的顺序与插入顺序无关。因此,这些值可以被洗牌。您可以使用json
库将输入字符串转换为类似字典的对象
>>> import json
>>> input1 = '{"value1": 1.0, "value2": 1.2}'
>>> input2 = '{"value2": 1.5}'
>>> input1 = json.loads(input1)
>>> input2 = json.loads(input2)
>>> for key in input1.keys():
... print(input1[key])
...
1.2
1.0
>>> for key in input2.keys():
... print(input2[key])
...
1.5
您可以使用json
库将输入字符串转换为类似字典的对象
>>> import json
>>> input1 = '{"value1": 1.0, "value2": 1.2}'
>>> input2 = '{"value2": 1.5}'
>>> input1 = json.loads(input1)
>>> input2 = json.loads(input2)
>>> for key in input1.keys():
... print(input1[key])
...
1.2
1.0
>>> for key in input2.keys():
... print(input2[key])
...
1.5
如果顺序在您的案例中并不重要,您可以像下面这样循环您的数据:
for v in data.values():
file.write('{}'.format(v))
输出:
>>> data = {"value1": 1.0, "value2": 1.2}
>>> for v in data.values():
... print(v)
...
1.2
1.0
>>>
如果顺序在您的案例中并不重要,您可以像下面这样循环您的数据:
for v in data.values():
file.write('{}'.format(v))
输出:
>>> data = {"value1": 1.0, "value2": 1.2}
>>> for v in data.values():
... print(v)
...
1.2
1.0
>>>
这要视情况而定,但我认为你不想写所有你得到的数据,只想写一些数据,如果它们存在的话
因此,这里有一个pythonic方法(尝试
/除了
):
inputs
只是一个dict
列表,例如,expected\u keys
是一个要写入的键列表,如果它们存在于输入中
这样,您就不会丢失现有的钥匙,并且在钥匙丢失时也不会引发KeyError
这是处理这个问题的真正的python方法,请参见这要视情况而定,但我认为您不想写入所有数据,而只想写入某个数据(如果存在)
因此,这里有一个pythonic方法(尝试
/除了
):
inputs
只是一个dict
列表,例如,expected\u keys
是一个要写入的键列表,如果它们存在于输入中
这样,您就不会丢失现有的钥匙,并且在钥匙丢失时也不会引发KeyError
这是真正的蟒蛇式处理方法,请参见