Python — Как я могу распечатать определенное поле словаря из многих словарей в списке?

#python #list #dictionary #printing #output

#python #Список #словарь #печать #вывод

Вопрос:

В настоящее время я работаю над игрой «Угадай, кому нравится» для школьной работы, и, похоже, я не могу заставить это работать. То, что я пытаюсь сделать, это напечатать поле «Name» из всех приведенных ниже словарей в списке.

  Greg = {"Name":"Greg", "HairLength":"Short", "HairColour":"Brown", "FacialHair":"Yes", "Jewellery":"Yes", "Hat":"No", "Lipstick":"No", "Gender":"Male"}

 Chris = {"Name":"Chris", "HairLength":"Long", "HairColour":"Blonde", "FacialHair":"No", "Jewellery":"No","Hat":"Yes", "Lipstick":"Yes", "Gender":"Male"}

 Jason = {"Name":"Jason", "HairLength":"Short", "HairColour":"Brown", "FacialHair":"Yes", "Jewellery":"No","Hat":"Yes", "Lipstick":"No", "Gender":"Male"}

 Clancy = {"Name":"Clancy", "HairLength":"Bald", "HairColour":"Red", "FacialHair":"Yes", "Jewellery":"No", "Hat":"No","Lipstick":"No", "Gender":"Male"}

 Betty = {"Name":"Betty", "HairLength":"Short", "HairColour":"Blonde", "FacialHair":"No", "Jewellery":"Yes","Hat":"Yes", "Lipstick":"Yes", "Gender":"Female"}

 Helen = {"Name":"Helen", "HairLength":"Short", "HairColour":"Brown", "FacialHair":"No", "Jewellery":"No", "Hat":"No","Lipstick":"Yes", "Gender":"Female"}

 Selena = {"Name":"Selena", "HairLength":"Long", "HairColour":"Brown", "FacialHair":"No", "Jewellery":"Yes","Hat":"No", "Lipstick":"No", "Gender":"Female"}

 Jacqueline = {"Name":"Jacqueline", "HairLength":"Long", "HairColour":"Red", "FacialHair":"Yes", "Jewellery":"Yes", "Hat":"No","Lipstick":"No", "Gender":"Female"}


AISuspects = ([Greg, Chris, Jason, Clancy, Betty, Selena, Helen,
Jacqueline])
UserSuspects = ([Greg, Chris, Jason, Clancy, Betty, Selena, Helen, Jacqueline])

print("AISuspects:")
#Here i want it to print the field "Name" in every dictionary within the list AISuspects 


print("UserSuspects:")
#Here i want it to print the field "Name" in every dictionary within the list UserSuspects
 

Ожидаемый результат и текущий результат после решения:

AI подозревает: [‘Грег’, ‘Крис’, ‘Джейсон’, ‘Клэнси’, ‘Бетти’, ‘Селена’, ‘Хелен’, ‘Жаклин’]

Пользователь подозревает: [‘Грег’, ‘Крис’, ‘Джейсон’, ‘Клэнси’, ‘Бетти’, ‘Селена’, ‘Хелен’, ‘Жаклин’]

Комментарии:

1. Вам не нужны круглые скобки () вокруг ваших AISuspects UserSuspects списков и . Достаточно просто создать список с [] помощью.

Ответ №1:

Вы можете использовать понимание списка, чтобы получить список имен всех подозреваемых

 suspects_names = [suspect['Name'] for suspect in AISuspects]
 

Тогда вы можете использовать print(' '.join(suspect_names))

Если вы не возражаете печатать каждое имя в новой строке, просто используйте цикл for:

 for suspect in AISuspects:
    print(suspect['Name'])
 

Позаботьтесь об этих круглых скобках вокруг определений списков, они вам не нужны, и они обычно используются для определения кортежей, поэтому я бы избавился от них

Комментарии:

1. Я немного смущен, не могли бы вы расширить, чтобы узнать, почему это работает, а не просто знать, что это работает, и я могу двигаться дальше… Спасибо

2. @ComputerExpert69 Можете ли вы уточнить, какая именно часть вас смущает? Я думаю, что первое решение, предлагаемое с использованием понимания, — это то, что вы, вероятно, еще не изучили. Второе решение может показаться вам более знакомым.

3. О, извините, я не понял, что вы отредактировали свой пост, да, я понимаю, что второе решение спасибо!

4. @ComputerExpert69 Если это решение помогло вам, пожалуйста, убедитесь, что вы отметили его как принятое (галочка рядом с этим ответом).

5. Нет, конечно, никаких обид. Вы абсолютно правы, это лучшее решение для будущих читателей, в чем я виноват.

Ответ №2:

 UserSuspects = [Greg['Name'], Chris['Name'],Jason['Name'], Clancy['Name'], Betty['Name'], Selena['Name'], Helen['Name'], Jacqueline['Name']]


print UserSuspects
 

Комментарии:

1. Это гораздо более простое решение, и я получал ошибки от других решений, поэтому я предложу вам это решение вопросов 😉

2. Принятие этого решения не имеет никакого смысла @ComputerExpert69, когда другое явно является лучшим решением здесь и способом решения этой проблемы.

3. Как именно это «лучшее» решение? @idjaw

4. @ComputerExpert69 что делать, если вам также нужно вызвать нового подозреваемого John ? Или, может быть, еще 200? И как это отвечает на ваш вопрос » Как я могу распечатать определенное поле словаря из многих словарей в списке? »

5. @Andras Deak, вы правы, его решение «лучше», оно не такое простое, но оно, безусловно, намного лучше закодировано