Проблемы с использованием .get для получения значений из словаря - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь написать несколько циклов, чтобы извлечь значения из словаря и напечатать их как кнопки-флажки. Проблема, с которой я столкнулся, заключается в том, что когда я использую введенный код, я получаю PY_VAR01 и т. Д. В качестве своих «Имен»

Я знаю, что мне нужно использовать .get (), чтобы получить значение, но когда я ввожуtext = version [2] ['Name']. get (), тогда мои имена отображаются как пустые. Я искал и пробовал разные вещи и не мог заставить что-либо работать, поэтому помощь была бы признательна, или если бы кто-то мог указать мне правильное направление.

versions = { 1: {'Name': '5.11 - CO', 'Location': '#',
                 'Name': 'WS 2016 V1607', 'Location': '#',
                 'Name': 'Win 10 PRO V1803', 'Location': '#',
                 'Name': 'TEST 1', 'Location': '#',
                 'Name': 'TEST 2', 'Location': '#',
                 'Name': 'Test 3', 'Location': '#',
                 'Name': 'TEST 4', 'Location': '#',
                 'Name': 'TEST 5', 'Location': '#',
                 },
             2: {'Name':


# Version_5_5_EAC
v5_5_eac_options = Frame(optionsScreen)
v5_5_eac_options.grid()

for Name in versions:
    versions[1]['Name'] = Variable()
    l = Checkbutton(v5_5_eac_options, text=versions[1]['Name'], variable=versions[1]['Name'])
    l.pack()

Я бы хотел, чтобы флажок печаталсвязанное имя (т.е. 5.5 - (EAC)) вместо PY_VAR01

ТАК спасибо всем, кто помог. В основном это работает сейчас, когда я исправил словарь.

Это мой обновленный код для цикла for, но он называет каждый флажок одной и той же переменной, поэтому мне нужно еще немного поработать с ним.

for Name in versions[1]:
    var = Variable()
    l = Checkbutton(v5_5_eac_options, text=versions[1][4]['Name'], variable=var)
    l.pack()

Ответы [ 2 ]

4 голосов
/ 01 ноября 2019

Вам не нужно использовать get.

Более того, когда ключ, скажем, Name повторяется в словаре конструктора, сохраняется только одно значение.

versions = {1: {'Name': '5.5 - (EAC)', 'Location': '#',
                'Name': 'WS 2012 RS', 'Location': '#',
                'Name': 'Win 10 PRO V1607', 'Location': '#',
                'Name': 'TEST 1', 'Location': '#',
                'Name': 'TEST 2', 'Location': '#',
                'Name': 'Test 3', 'Location': '#',
                'Name': 'TEST 4', 'Location': '#',
                'Name': 'TEST 5', 'Location': '#'}}


print (versions)

приводит к

{1: {'Name': 'TEST 5', 'Location': '#'}}

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

versions = {1: [{'Name': '5.5 - (EAC)', 'Location': '#'},
                {'Name': 'WS 2012 RS', 'Location': '#'},
                 ...],
            2:...
            }  

Теперь, чтобы получить доступ, скажем, к пятому элементу списка имен, тест 2, мы добавим индекс 4(списки Python начинаются с 0)

text = version[1][4]['Name']

Чтобы отобразить только последнюю версию, что-то вроде

for record in versions[-1]:
    record['variable'] = IntVar()
    l = Checkbutton(v5_5_eac_options, text=record['Name'],   variable=record['variable']
    l.pack()

PS. Я вижу, что вопрос обновляется в соответствии с предложенным ответом

1 голос
/ 01 ноября 2019

Сначала установите словарь в качестве ключа: список пар словарей:

versions = {
    1: [
        {'Name': '5.5 - (EAC)', 'Location': '#'},
        {'Name': 'WS 2012 RS', 'Location': '#'},
        {'Name': 'Win 10 PRO V1607', 'Location': '#'},
        {'Name': 'TEST 1', 'Location': '#'},
        {'Name': 'TEST 2', 'Location': '#'},
        {'Name': 'Test 3', 'Location': '#'},
        {'Name': 'TEST 4', 'Location': '#'},
        {'Name': 'TEST 5', 'Location': '#'}
    ],
    2: [
        {'Name': '5.5 - S', 'Location': '#'},
        {'Name': 'WS 2012 RS', 'Location': '#'},
        {'Name': 'Win 10 PRO V1607', 'Location': '#'},
        {'Name': 'TEST 1', 'Location': '#'},
        {'Name': 'TEST 2', 'Location': '#'},
        {'Name': 'Test 3', 'Location': '#'},
        {'Name': 'TEST 4', 'Location': '#'},
        {'Name': 'TEST 5', 'Location': '#'}
    ]
}

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

for index, version in in versions.items():
    for record in version:
        print(record['Name'])

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

РЕДАКТИРОВАТЬ:

Вы хотите иметь два отдельных цикла для на основе вашего редактирования.

for record in versions[1]:
    print record['Name']

и

for record in versions[2]:
    print record['Name']
...