Python 当值位于具有嵌套字典的元组中时,是否更新字典中的值?

Python 当值位于具有嵌套字典的元组中时,是否更新字典中的值?,python,Python,现在,Dict_1将是 Dict_1 = {} Dict_1['Sample_Data'] = [(None, None, None)] Dict_2 = {} Dict_2['detail'] = {'status1' : 0, 'status2' : 0} File = 'abc.txt' File_time = '10282020' Dict_1['Sample_Data'].insert(0,(File, File_time, Dict_2)) 同样,如果我在Dict_1中插

现在,Dict_1将是

Dict_1 = {}
Dict_1['Sample_Data'] =  [(None, None, None)]

Dict_2 =  {}
Dict_2['detail'] = {'status1' : 0, 'status2' : 0}

File = 'abc.txt'
File_time = '10282020'

Dict_1['Sample_Data'].insert(0,(File, File_time, Dict_2))
同样,如果我在Dict_1中插入更多的数据,那么Dict_1将是-

{'Sample_Data' : ('abc.txt',10282020,{'details' : {'status1' : 0, 'status2' : 0}), (None, None, None)}

如何将Dict_1中file2.txt的状态4和状态5的值更新为0?

您可以访问并更新这些值(如果您知道路径):

输出:

Dict_1['Sample_Data'][0][2]['details']['status4'] = 0
Dict_1['Sample_Data'][0][2]['details']['status5'] = 0

print(Dict_1)
for f in Dict_1['Sample_Data']:
  if f[0] == 'file2.txt':
    f[2]['details']['status4'] = 0
    f[2]['details']['status5'] = 0
    break

print(Dict_1)
如果您不知道路径:

{'Sample_Data' : ('file2.txt', '10292020',{'details' : {'status4' : 1, 'status5' : 1}}),('abc.txt','10282020',{'details' : {'status1' : 0, 'status2' : 0}}), (None, None, None)}
{'Sample_Data': [('file2.txt', '10292020', {'details': {'status4': 0, 'status5': 0}}), ('abc.txt', '10282020', {'details': {'status1': 0, 'status2': 0}}), (None, None, None)]}
输出:

Dict_1['Sample_Data'][0][2]['details']['status4'] = 0
Dict_1['Sample_Data'][0][2]['details']['status5'] = 0

print(Dict_1)
for f in Dict_1['Sample_Data']:
  if f[0] == 'file2.txt':
    f[2]['details']['status4'] = 0
    f[2]['details']['status5'] = 0
    break

print(Dict_1)

您可以访问并更新这些值(如果您知道路径):

输出:

Dict_1['Sample_Data'][0][2]['details']['status4'] = 0
Dict_1['Sample_Data'][0][2]['details']['status5'] = 0

print(Dict_1)
for f in Dict_1['Sample_Data']:
  if f[0] == 'file2.txt':
    f[2]['details']['status4'] = 0
    f[2]['details']['status5'] = 0
    break

print(Dict_1)
如果您不知道路径:

{'Sample_Data' : ('file2.txt', '10292020',{'details' : {'status4' : 1, 'status5' : 1}}),('abc.txt','10282020',{'details' : {'status1' : 0, 'status2' : 0}}), (None, None, None)}
{'Sample_Data': [('file2.txt', '10292020', {'details': {'status4': 0, 'status5': 0}}), ('abc.txt', '10282020', {'details': {'status1': 0, 'status2': 0}}), (None, None, None)]}
输出:

Dict_1['Sample_Data'][0][2]['details']['status4'] = 0
Dict_1['Sample_Data'][0][2]['details']['status5'] = 0

print(Dict_1)
for f in Dict_1['Sample_Data']:
  if f[0] == 'file2.txt':
    f[2]['details']['status4'] = 0
    f[2]['details']['status5'] = 0
    break

print(Dict_1)
直接回答:

{'Sample_Data': [('file2.txt', '10292020', {'details': {'status4': 0, 'status5': 0}}), ('abc.txt', '10282020', {'details': {'status1': 0, 'status2': 0}}), (None, None, None)]}
切向相关:

测试数据使用元组来存储数据。与列表不同,元组是不可变的,这意味着它们不能更改。 Python中的元组使用圆括号“()”,列表使用方括号“[]”。 原因很简单,就是性能,元组对于只读数据更有效。

直接回答:

{'Sample_Data': [('file2.txt', '10292020', {'details': {'status4': 0, 'status5': 0}}), ('abc.txt', '10282020', {'details': {'status1': 0, 'status2': 0}}), (None, None, None)]}
切向相关:

测试数据使用元组来存储数据。与列表不同,元组是不可变的,这意味着它们不能更改。 Python中的元组使用圆括号“()”,列表使用方括号“[]”。
原因很简单,就是性能,元组对于只读数据更有效。

尽管元组是不可变的,但它包含对列表和字典等对象的引用,并且这些对象可以更改。但是,引用本身不能更改。因此可以在元组中更新字典

试试这个:

Dict_1['Sample_Data'][0][2]['detail']['status4'] = 0
Dict_1['Sample_Data'][0][2]['detail']['status5'] = 0

尽管元组是不可变的,但它包含对列表和字典等对象的引用,并且这些对象可以更改。但是,引用本身不能更改。因此可以在元组中更新字典

试试这个:

Dict_1['Sample_Data'][0][2]['detail']['status4'] = 0
Dict_1['Sample_Data'][0][2]['detail']['status5'] = 0

我建议您将DICT_1中的数据类型更改为python类对象,并将这些类对象上的do操作更改为更易于处理和处理我建议您将DICT_1中的数据类型更改为python类对象,并将这些类对象上的do操作更改为更易于处理和处理您无法通过索引,但您可以修改其中的对象,例如,如果
t=([1,2,3],[6,5,4])
,则可以执行
t[1].sort();打印(t)
,它将是
([1,2,3],[4,5,6])
。正确,但问题给出了一个空元组=(无,无,无)。这可能是某种列表结尾或没有文件指示或其他什么,但不管是什么,问题是关于更新包含对象的元组,你可以这样做。如果是这样的话,它的包含是不必要的。更新的答案更直接。由于拼写错误,他们的代码无法运行,但我确实修复并测试了它。您不能通过索引来分配元组,但可以修改其中的对象,例如,如果
t=([1,2,3],[6,5,4])
,您可以执行
t[1].sort();打印(t)
,它将是
([1,2,3],[4,5,6])
。正确,但问题给出了一个空元组=(无,无,无)。这可能是某种列表结尾或没有文件指示或其他什么,但不管是什么,问题是关于更新包含对象的元组,你可以这样做。如果是这样的话,它的包含是不必要的。更新的答案更直接。由于输入错误,他们的代码无法运行,但我确实对其进行了修复和测试。这是一种方法,但如果只修改其中的对象,而不是为其分配新值,则不必将元组转换为列表。这是一种方法,但如果只修改其中的对象,则不必将元组转换为列表,而不是给它们分配新的值。