Сравнение списка словарей. Ошибка типа: индексы кортежей должны быть целыми числами или срезами, а не str

#python-3.x

Вопрос:

Я пытаюсь сравнить два набора данных (файл1,файл2) в формате словаря. При сравнении с использованием примера 1 (см. Ниже) код работает, но когда я добавляю больше данных (пример 2) Я получаю ошибку, так как индексы кортежей должны быть целыми или срезами. Я изо всех сил пытаюсь понять это, так как я сравниваю два набора словарей, а не список, чтобы использовать целое число для сравнения, используя целые числа в индексе, а не имя ключа в словаре.

#Список диктантов пример 1: в этом примере это работает

 file1= {'name': 'Phill', 'age': 42}
file2= {'name': 'Phill', 'age': 22}
 

#Список диктантов пример 2: в этом примере это не работает

 file1= {'name': 'Phill', 'age': 42},{'name': 'Phill', 'age': 22}
file2= {'name': 'Phill', 'age': 22},{'name': 'Phill', 'age': 52}

#Function with two args

    def diffValue (file1,file2) :
        

    for newAge in file1,file2 :

        if file1 [ 'age' ] == file2 [ 'age' ] :
            # if no difference found in both files within the age field
            print ( "No difference found" )

        else :

            # the age is different. return values name,age where ever there is a difference from file1 only
            return newAge
 

Ожидаемые результаты:

 Return {'name': 'Phill', 'age': 42},{'name': 'Phill', 'age': 22}
 

Ответ №1:

Я думаю, ты хотел сделать что-то подобное:

 file1 = {'name': 'Phill', 'age': 42}, {'name': 'Phill', 'age': 22}
file2 = {'name': 'Phill', 'age': 22}, {'name': 'Phill', 'age': 52}

def diff_value(f1, f2):
    # Create a list to store the differences
    diffs = []

    # Iterate for every element in parallel
    for v1, v2 in zip(f1, f2):
        if v1['age'] == v2['age']:
            # If no difference found in both files within the age field
            print('No difference found')
        
        else:
            # The age is different, append v1 to `diffs`
            diffs.append(v1)
    
    return diffs
    
print(diff_value(file1, file2))
# Output: [{'name': 'Phill', 'age': 42}, {'name': 'Phill', 'age': 22}]
 

Ответ №2:

 >>> file1= {'name': 'Phill', 'age': 42},{'name': 'Phill', 'age': 22}
>>> file1
({'name': 'Phill', 'age': 42}, {'name': 'Phill', 'age': 22})
>>> type(file1)
<class 'tuple'>
 

файл1 является кортежем, поэтому он выдает ошибку

один из способов заставить его работать с вашей функцией-это:

 def diffValue (file1,file2) :
    for newAge in file1,file2 :
        if file1 [ 'age' ] == file2 [ 'age' ] :
            # if no difference found in both files within the age field
            print ( "No difference found" )
        else :
            # the age is different. return values name,age where ever there is a difference from file1 only
            return newAge
file1= [{'name': 'Phill', 'age': 42},{'name': 'Phill', 'age': 22}]
file2= [{'name': 'Phill', 'age': 22},{'name': 'Phill', 'age': 52}]

a=""
for i in range(len(file1)):
    a =str(diffValue(file1[i],file2[i])) ","
a=a[:-1]
print(a)