Объединение элементов разной длины в один список Python с использованием циклов for и if - PullRequest
0 голосов
/ 13 декабря 2018

Ввод:

a = [{'layer': 'OVC', 'ceiling': '020', 'type': None}]
b = [{'layer': 'BKN', 'ceiling': '010', 'type': None}, {'layer': 'OVC', 'ceiling': '020', 'type': None}]
c = [{'layer': 'BKN', 'ceiling': '010', 'type': None}, {'layer': 'BKN', 'ceiling': '020', 'type': None},{'layer': 'OVC', 'ceiling': '030', 'type': None}]
d = [a,b,c] 

results1 = []
results2 = [] 

for i in range(0,len(d)):
 res1=[]
 res2=[]
 cloudstf = d[i]
 if not cloudstf:
  res1 = "-9999"
  res2 = "-9999"
  results1.append(res1)
  results2.append(res2)
 elif len(d[i])==1:
  res1 = d[i]["layer"]
  res2 = d[i]["ceiling"]
  results1.append([res1])
  results2.append([res2])
 elif len(d[i])>1:
  for k in range(0,len(d)):
   res1 = d[i][k]["layer"]
   res2 = d[i][k]["ceiling"]
   results1.append([res1])
   results2.append([res2])
 cloudtf = []

cloud_group_layer = results1
cloud_group_height = results2 
print(cloud_group_height)
print(cloud_group_layer)

Вместо получения:

cloud_group_layer = [['OVC'], ['BKN'], ['OVC'], ['BKN'],['BKN'],['OVC']]
cloud_group_height = [['020'], ['010'], ['020'], ['010'],['020'],['030']]

Как получить:

cloud_group_layer = [['OVC'], ['BKN','OVC'], ['BKN','BKN','OVC']]
cloud_group_height = [['020'], ['010','020'], ['010','020','030']]

Где слой и высота сгруппированы по how many.Код - это всего лишь небольшая путаница в синтаксисе.Или это может быть Tuple из-за высоты.

Вы можете получить эту ошибку при запуске и ее из-за индексации:

Traceback (most recent call last):
  File "main.py", line 22, in <module>
    res1 = d[i]["layer"]
TypeError: list indices must be integers or slices, not str 

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Простым решением может быть получение списка, который вы хотите добавить вместо элементов этого списка.Скажем, вы хотите добавить ['BKN','OVC'], затем не добавляйте ['BKN'] и ['OVC'], добавьте весь список при его получении.

Надеюсь, это поможет!

0 голосов
/ 13 декабря 2018

Вы можете сделать это с некоторыми понятиями, такими как:

Код:

cloud_group_layer = [[x['layer'] for x in data] for data in d]
cloud_group_height = [[x['ceiling'] for x in data] for data in d] 

Тестовый код:

a = [{'layer': 'OVC', 'ceiling': '020', 'type': None}]
b = [{'layer': 'BKN', 'ceiling': '010', 'type': None},
     {'layer': 'OVC', 'ceiling': '020', 'type': None}]
c = [{'layer': 'BKN', 'ceiling': '010', 'type': None},
     {'layer': 'BKN', 'ceiling': '020', 'type': None},
     {'layer': 'OVC', 'ceiling': '030', 'type': None}]

d = [a, b, c]

wanted_cloud_group_layer = [['OVC'], ['BKN', 'OVC'], ['BKN', 'BKN', 'OVC']]
wanted_cloud_group_height = [['020'], ['010', '020'], ['010', '020', '030']]

cloud_group_layer = [[x['layer'] for x in data] for data in d]
cloud_group_height = [[x['ceiling'] for x in data] for data in d]

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