Как поместить много списков с неизвестными размерами в словарь - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю над многими таблицами, количество строк в этих таблицах не одинаково. Используя for-l oop, я мог бы go просмотреть содержимое этих таблиц и поместить его в два списка. Для каждой итерации for-l oop содержимое этих списков будет изменяться в зависимости от содержимого этих таблиц. После этого я собираюсь поместить содержимое этих списков для каждой итерации в один список.

Например:

Я могу go вручную поместить содержимое двух списков ниже в словарь, но это будет нормально, если у меня есть два списка с известными измерениями (число количество строк известно), но если у меня есть два списка с неизвестным количеством строк, это не сработало.

Таблица: 1

player1 = ['1','2','3']

player2 = ['4','5','6']


d ={}

d['players'] = {}

d['players']['player1'] = []

d['players']['player1'].append(T1[0])

d['players']['player1'].append(T2[0])

d['players']['player2'] = []

d['players']['player2'].append(T1[1])

d['players']['player2'].append(T2[1])

d['players']['player3'] = []

d['players']['player3'].append(T1[2])

d['players']['player3'].append(T2[2])

print(d)

### {'players': {'player1': ['1', '4'], 'player2': ['2', '5'], 'player3': ['3', '6']}}

, если у меня есть два других списка из другой таблицы, где число строк неизвестно, и я хочу добавить в другой словарь, где значения (элементы) словаря будут меняться для каждой итерации for-l oop, что я могу сделать?

Например:

Таблица: 2

player1 = ['7','8','9',.....]

player2 = ['1','4','7',.....]

Словарь должен быть:

d = {'players': {'player1': ['7', '1'], 'player2': ['8', '4'], 'player3': ['9', '7'], .......}}

В конце я хочу добавить эти два словаря выше в список

List = [{'players': {'player1': ['1', '4'], 'player2': ['2', '5'], 'player3': ['3', '6']}}, {'players': {'player1': ['7', '1'], 'player2': ['8', '4'], 'player3': ['9', '7'], .......}}]

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

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

player1 = ['1','2','3']
player2 = ['4','5','6']

d ={}
d['players'] = {'player'+str(i+1): list(tup) for i, tup in enumerate(zip(player1, player2))}

d будет:

{'players': {
  'player1': ['1', '4'],
  'player2': ['2', '5'],
  'player3': ['3', '6']}
}

Вместо использования на основе чисел ключи в dict, вы могли бы рассмотреть просто использование списка:

player1 = ['1','2','3']
player2 = ['4','5','6']


d ={}
d['players'] = [list(tup) for i, tup in enumerate(zip(player1, player2))]

# access with index instead of player_index
d['players'][0]
# ['1', '4']
0 голосов
/ 09 апреля 2020

Мне кажется, я получил очень простой ответ на ваш вопрос. Просто попробуйте этот код ... Это должно быть то, что вы ищете.

player1 = ["7", "8", "9"]

player2 = ["1", "4", "7"]

d = {"players": [{str(player1), str(player2)}]}

d2 = {"players": [{str(player1), str(player2)}]}

dList = []

for player in d:
    dList.append(d)
    dList.append(d2)
0 голосов
/ 09 апреля 2020

Вы можете сделать это, используя для l oop, как в следующем коде:

d = {'players':{}}

for i in range(len(player1)): # Assuming length if player1 is same as player2
   player = 'player'+str(i+1) #String Concat 
   d['players'][player] = [player1[i],player2[I]]

Чтобы сохранить их в списке, вы можете заменить d, используя d1 для первой таблицы и d2 для второй таблицы, как показано ниже

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