[英]Recursing in nested dictionaries and lists
這是我以前的問題之一的后續問題。 我有一些字典,需要查看它們包含的每個值,如果該值是日期時間,則需要以特定方式設置其格式。 我還需要能夠遞歸到嵌套的字典和列表中。 這是我到目前為止的內容:
def fix_time(in_time):
out_time = '{}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}'.format(in_time.year, in_time.month, in_time.day, in_time.hour, in_time.minute, in_time.second)
return out_time
def fix_recursive(dct):
for key, value in dct.items():
if isinstance(value, datetime.datetime):
mydict[key] = fix_time(value)
elif isinstance(value, dict):
fix_recursive(value)
mydict={
'Field1':'Value1'
'SomeDateField1':1516312413.729,
'Field2':'Value2',
'Field3': [
{
'Subfield3_1':'SubValue1',
'SubDateField3_1':1516312413.729
},
{
'Subfield3_2':'SubValue2',
'SubDateField3_2':1516312413.729
},
{
'Subfield3_3':'SubValue3',
'SubDateField3_3':1516312413.729
}
],
'Field4': {
'Subfield4_1':'SubValue1',
'SubDateField4_1':1516312413.729
}
}
fix_recursive(mydict)
這對字典和嵌套字典非常有用,但對列表則不那么有用。 因此,在上面的示例中,fix_recursive將糾正SomeDateField1和SubDateField4_1,但不能糾正SubDateField3_1,SubDateField3_2或SubDateField3_3。 另外,由於我不知道輸入之前會是什么樣子,因此我試圖創建一個函數,該函數可以獲取列出的嵌套3層或4層深度中的值。
和建議,將不勝感激。
謝謝!
您需要區分遍歷列表和字典
def fix_recursive(obj):
if isinstance(obj, list): # could replace with collections.abc.MutableSequence
itr = enumerate(obj)
elif isinstance(obj, dict): # could replace with collections.abc.MutableMapping
itr = obj.items()
else:
return # don't iterate -- pass back up
for key, value in itr:
if isinstance(value, datetime.datetime):
obj[key] = fix_time(value)
else:
fix_recursive(value)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.