Я пишу функцию, которая принимает 1 аргумент, и я хочу, чтобы аргумент был списком. Я получил практически все, что хотел, за исключением или ОДНОЙ вещи: `

def index_responses(a):
    j = {}
    count = 0
    key = 0
    for y in a:
       j["Q",key]=a[count]
       count+=1
       key+=1
    print(j)
    return a

Это вызовы функций:

print(index_responses(['a', 'b', 'c']))
print(index_responses(['d','d','b','e','e','e','d','a']))

И мой вывод такой:

{('Q', 0): 'a', ('Q', 1): 'b', ('Q', 2): 'c'}
{('Q', 0): 'd', ('Q', 1): 'd', ('Q', 2): 'b', ('Q', 3): 'e', ('Q', 4): 'e', ('Q', 5): 'e', ('Q', 6): 'd', ('Q', 7): 'a'}

Но мне нужно, чтобы мой вывод выглядел чище, например: {(Q1: 'a', Q2: 'b' (и т. Д.)

Как мне очистить вывод?

Спасибо за любые ответы.

0
Landon G 22 Окт 2018 в 20:44

2 ответа

Лучший ответ

Используйте "Q" + str(key) или f"Q{str(key)}" (в Python 3.6+) в цикле:

def index_responses(a):
    j = {}
    count = 0
    key = 1
    for y in a:
       j["Q" + str(key)] = a[count]
       count += 1
       key += 1
    return j

print(index_responses(['a', 'b', 'c']))
print(index_responses(['d','d','b','e','e','e','d','a']))

Также обратите внимание, что вам нужно возвращать j, а не a, который фактически является входом для функции.


def index_responses(a):
    return {f'Q{str(i)}': x for i, x in enumerate(a, 1)}

print(index_responses(['a', 'b', 'c']))
print(index_responses(['d','d','b','e','e','e','d','a']))

# {'Q1': 'a', 'Q2': 'b', 'Q3': 'c'}
# {'Q1': 'd', 'Q2': 'd', 'Q3': 'b', 'Q4': 'e', 'Q5': 'e', 'Q6': 'e', 'Q7': 'd', 'Q8': 'a'}
0
Austin 22 Окт 2018 в 18:05

Я думаю , что вы хотите просто объединить 'Q' со строковым представлением key:

   j["Q" + str(key)]=a[count]

Это изменение дает выход

{'Q0': 'a', 'Q1': 'b', 'Q2': 'c'}
['a', 'b', 'c']
{'Q0': 'd', 'Q5': 'e', 'Q6': 'd', 'Q7': 'a', 'Q1': 'd', 'Q3': 'e', 'Q4': 'e', 'Q2': 'b'}
['d', 'd', 'b', 'e', 'e', 'e', 'd', 'a']

Есть лучшие способы подсчета предметов в списке; Я оставлю это для вашего исследования.

0
Prune 22 Окт 2018 в 17:49
52934930