#python #dictionary #compare
#python #словарь #Сравнить
Вопрос:
Мне нужно проверить, все ли элементы в моем dict равны.
Я пытаюсь с этим (1,1,1,1) просто посмотреть, запустится ли он, но он всегда дает мне »
Traceback (most recent call last): line 3, in <module>
if all(sum["lines"]) == sum["lines"][0]:
TypeError: 'set' object is not subscriptable
может кто-нибудь показать мне, в чем проблема?
может быть, небольшая помощь, как я могу решить это более простым способом
sum = {"lines": {1,1,1,1}}
if all(sum["lines"])== sum["lines"][0]:
print('they all are {}'.format(sum["lines"][0]))
Комментарии:
1. Пожалуйста, обновите свой вопрос с полным ответом на ошибку.
2. Вы имели в виду: ’sum = {«строки»: (1,1,1,1), «столбцы»: (1,1,1,1)}’?
3. Это не причина вашей ошибки, но так не
all
работает. Ваша ошибка вызвана попыткой индексироватьset
объект, с помощью которого вы создали{1,1,1,1}
. Вероятно, вы хотели создатьlist
объект.4. как я уже сказал, я учусь, и я был уверен, что это сработает
5. есть ли способ сделать это, сравнив набор?
Ответ №1:
поскольку вы используете наборы, вы можете легко сделать:
sum = {"lines": {1,1,1,1}, "columns": {1,1,1,1}}
if len(sum["lines"]) == 1:
print('they all are {}'.format(sum["lines"]))
Ответ №2:
Поскольку вы используете наборы, это можно сделать легко:
if len(sum['linhas']) ==1:
print('they are all equal')
Если значения хранятся в списке, то:
if len(set(sum['linhas'])) == 1:
print('they are equal')
Или
if sum['linhas'].count(sum['linhas'][0]) == len(sum['linhas']):
print('they are equal')
Комментарии:
1. спасибо за помощь, но разве Len() не просто знает количество элементов в списке?
2. У вас нет никаких списков.
3. Эй, @quamrana, поскольку ты это сказал, я зашел в Google о Len на множестве и обнаружил, что если я использую его, возвращаемое значение — это количество разных элементов. Большое спасибо quamrana Shadowcodder за помощь, вы, ребята, потрясающие!!!!!!
4. Отличные новости. Итак, вы хотели использовать наборы, кортежи или списки внутри вашего dict? Я прошу об этом от имени всех будущих читателей этого вопроса, чтобы устранить путаницу.
5. Я думаю, что моей целью было действительно использовать наборы. Я использую его только для того, чтобы поместить все суммы строк, столбцов и диагоналей матрицы, чтобы я мог сравнить, если все они равны. это решатель судоку, ха-ха.
Ответ №3:
Привет, я здесь тоже новичок, но все равно хотел бы помочь вам решить эту проблему. На мой взгляд, ключевое слово словаря — «lines», но вы используете «linhas» в операторе if. Также вы бы просто использовали оператор if, подобный этому:
sums = {"lines": {1,1,1,1}, "columns": {1,1,1,1}}
if sums["lines"] == sums["columns"]:
print("They are equal")
Комментарии:
1. Это была честная ошибка в «linhas» и «lines», извините, я кодировал на португальском, поэтому, когда я пришел в stackoverflow, я попытался перейти на английский, но забыл другой, хахаха. Кроме того, я хотел знать, равны ли все в «строках» друг другу, «столбцов» даже не должно было быть, хахаха.
2. Извините, я неправильно истолковал ваш вопрос. Я думал, вы хотите проверить, равны ли они друг другу. То же самое здесь, честная ошибка.
3. Когда вы используете {} в python, как в данном случае {1,1,1,1}, это набор. Чтобы составить список, вы должны использовать [], например [1,1,1,1] Редактировать: чтобы заставить ваш код работать, вам просто нужно удалить ‘all’ и изменить его из set в list.