Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何动态迭代dict对象?_Python_Loops_Formatting - Fatal编程技术网

Python:如何动态迭代dict对象?

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 #... 由于输入数据的性质,这些值键可能存在,也可能不存在,因此为什么我要执行上述操作,所以当我

我想将so数据写入文件,但数据可能因其来源而异

目前,我的代码只执行以下操作:

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

这是真正的蟒蛇式处理方法,请参见