python2.7 - получение значения из словаря, где ключ является переменной - PullRequest
2 голосов
/ 23 ноября 2011

Я пытаюсь загрузить конкретный ключ из словаря с такими клавишами, как «символ 1», «перевод 1» и т. Д. (Я работаю с программой flashcard для изучения китайского языка).Во-первых, я без проблем загружаю словарь из файла .txt с помощью

f = codecs.open(('%s.txt' % list_name),'r','utf-8')
quiz_list = eval(f.read())

Затем я хочу, чтобы программа печатала список по порядку, чтобы я мог получить что-то вроде

"1. ('character 1' value)    ('pinyin 1' value)    ('translation 1' value)"

Программа регистрирует количество записей в списке и вычисляет количество отображаемых китайских слов (каждое слово имеет свой собственный символ, транскрипцию, перевод и номер записи).Теперь я хочу загрузить первое китайское слово из списка, используя 3 клавиши: «символ 1», «пиньинь 1» и «перевод 1».

Проверенный и проверенный способ получения значений из словаря - my_dictionary [ключ].Однако, если бы я вставил имя переменной в часть в скобках, python считал бы имя этой переменной как имя ключа и не использовал бы значение переменной.Есть ли способ сделать последний правильный путь?Я, например, попробовал следующее (очевидно, безрезультатно), чтобы загрузить ключ «символ 1» из списка:

i = 1
character_to_load = "character %s" % str(i)
print quiz_list[character_to_load]

Любые подсказки чрезвычайно приветствуются!

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Более общее решение этой проблемы, вместо того, чтобы свести структуру данных в словарь, снабженный строками, состоит в том, чтобы использовать лучшую структуру данных.Например, если у вас есть много ключей, которые выглядят как "translation n" для чисел n, вам лучше сделать translation словарь с ключами по номерам.Возможно, вы даже захотите сделать поиск другим путем: вы можете иметь объект Word (или любой другой), который имеет свойства translation, pinyin и character, а затем иметь список Word s..

Вы должны правильно построить эту структуру данных вместо eval файла.По сути, это никогда не является хорошей идеей, потому что это ужасно хрупко: вы заставляете текстовый файл быть чистым Python, но не пишете его как модуль.Вместо этого вам следует перебирать строки в файле и формировать структуру данных по ходу работы.

Если вы скажете мне текущую структуру вашего файла, я могу дать вам пример того, как правильно его проанализировать..

1 голос
/ 23 ноября 2011

Если я правильно понял ваш вопрос, я полагаю, что у вас может быть какая-то ошибка в коде, поскольку это прекрасно работает:

>>> d =  {'translation 1': 'dilligent', 'pinyin 1': 'ren4wei2', 'character 1': '\xe8\xaa\x8d\xe7\x88\xb2'}
>>> key = "translation %s" % 1
>>> d[key]
'dilligent'

Помогает ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...