Как перебрать словарь Python из пользовательского ввода? - PullRequest
0 голосов
/ 10 октября 2018

Справочная информация:

У меня есть файл JSON dictionary следующим образом:

dictionary = {"Qui": "クイ", "Quiana": "キアナ", "Quick": "クイック", "Quickley": "クイックリー", "Quico": "キコ", "Quiej-Alvarez": "クエイ アルバレス", "Quigg": "クイッグ", "Quigley": "クイグリー", "Quijano": "クイジャーノ", "Quik": "クイック", "Quilici": "クイリチ", "Quill": "クィル"}

Затем я позволю пользователю вводить столько ключей, сколько они хотят черезinput, наконец, верните форматированную строку в сочетании с key.value.

Вопрос:

Мой код до сих пор выполняет работу очень неуклюже / не полностью.Любой совет о том, как очистить код и достичь моей цели?

Текущий код:

import json
import sys, math
import codecs

#Part1
search_term,search_term2 = input("Enter a Name: ").split()
dictionary = {}
keys = dictionary.keys()
values = dictionary.values()
with open ('translation.json', 'r', encoding='utf-8-sig') as f:
    term_data = json.load(f)
if search_term.casefold() in term_data:
    word = search_term.title()     
elif search_term.title() in term_data:
    word = search_term.title()     
output1 = "{}".format(term_data[search_term])
#Part 2
with open ('translation.json', 'r', encoding='utf-8-sig') as f:
    term_data2 = json.load(f)
if search_term2.casefold() in term_data2:
    word2 = search_term2.title()    
elif search_term2.title() in term_data2:
    word2 = search_term2.title()     
#else:
    #print("Name not found in dictionary.")
output2 = "{}".format(term_data2[search_term2])
print("{}・{}".format(output1,output2))

1 Ответ

0 голосов
/ 10 октября 2018

Ваш текущий код может просто ввести 2 ключа, которые не могут соответствовать вашим первоначальным требованиям, я расширяю его следующим образом, упрощая его:

test.py :

import json
import codecs

with open('translation.json', 'r', encoding='utf-8-sig') as f:
    term_data = json.load(f)

search_terms = input("Enter a name: ").split()
l = [term_data[i] for i in search_terms if i.casefold() in term_data or i.title() in term_data]
print('.'.join(l))
  • Сначала нам просто нужно один раз открыть файл json, операция IO стоит дорого, нам нужно избегать повторения этого снова и снова.
  • Во-вторых, нам не нужно повторять терминсовпадайте с Part1, Part2.Мы можем сделать это в цикле, здесь я использую list comprehension.
  • Наконец, объясним буквально:
    • разделить все пользовательские вводы в список: search_terms
    • loopпользовательские термины ввода с for i in search_terms
    • , если кандидатный термин i s casefold() или title() в словаре term_data, его значение в dic было снова помещено в новый список l,если нет, то ничего не делайте.
    • , наконец, используйте разделитель ., чтобы объединить все необходимые элементы списка.

Выход:

~$ python3 test.py
Enter a name: Qui Quill Quiana
クイ.クィル.キアナ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...