AD
[{'a': '01', 'b': '02'}, {'a': '10', 'b': '20'}, {'c': ['03', '30']}]
кому там шо помогло - решительно непонятно
Size: a a a
AD
[{'a': '01', 'b': '02'}, {'a': '10', 'b': '20'}, {'c': ['03', '30']}]
ND
АМ
def merge_two_dicts(x, y):
z = x.copy()
z.update(y)
return z
ds = [{'a': '01', 'b': '02'}, {'a': '10', 'b': '20'}]
d = [{'c': '03'}, {'c': '30'}]
ds_2 = [merge_two_dicts(x,y) for x,y in zip(ds,d)]
АМ
{'c': '03', 'c': '30'}
— такую структуру данных делать нельзя, потому что у вас в одном и том же словаре получается два одинаковых ключа 'c'
АМ
{'c': '03', 'c': '30'}
— такую структуру данных делать нельзя, потому что у вас в одном и том же словаре получается два одинаковых ключа 'c'
БЕ
for
import requests
from bs4 import BeautifulSoup as bs
import re
import pandas as pd
dataset = []
headers = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
# ID станции от которой ищем время
from_station = 239
url = 'https://metrobook.ru/'
webpage = requests.get(url, headers)
response = BeautifulSoup(webpage.content, 'html.parser')
main__div = response.find_all('div', class_='stName')
for data in main__div:
station_id = data.find('span', class_='stName').get('mb_sd_id')
station = data.find('span', class_='stName').get_text()
station = re.search("[^(\n|\r)]+", station).group()
station = station.replace("\xa0"," ").strip()
dataset.append({
"id": station_id,
"stName": station})
for row in range(len(dataset)):
settings = {'mod': 'metrobook', 'oper': 'getShortestPath','sdid1': from_station, 'sdid2': dataset[row]['id'],'mid': '2','whatToMinimize': '0'}
table = requests.post('https://metrobook.ru/kcmsajax.php', data=settings, headers=headers).json()
dataset[row]['changeTime'] = table['table']['changeTime']
dataset[row]['changeNumber'] = table['table']['changeNumber']
dataset[row]['transitTime'] = table['table']['transitTime']
dataset[row]['ans'] = table['table']['ans']
dataset[row]['ans_count'] = len(table['table']['ans'])
dataset[row]['totalTime'] = table['table']['totalTime']
df = pd.DataFrame(dataset)
df.changeTime = df.changeTime / 60
df.totalTime = df.totalTime / 60
df.transitTime = df.transitTime / 60
df[(df.totalTime < 30) & (df.changeNumber <= 2)]
```БЕ
for
import requests
from bs4 import BeautifulSoup as bs
import re
import pandas as pd
dataset = []
headers = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
# ID станции от которой ищем время
from_station = 239
url = 'https://metrobook.ru/'
webpage = requests.get(url, headers)
response = BeautifulSoup(webpage.content, 'html.parser')
main__div = response.find_all('div', class_='stName')
for data in main__div:
station_id = data.find('span', class_='stName').get('mb_sd_id')
station = data.find('span', class_='stName').get_text()
station = re.search("[^(\n|\r)]+", station).group()
station = station.replace("\xa0"," ").strip()
dataset.append({
"id": station_id,
"stName": station})
for row in range(len(dataset)):
settings = {'mod': 'metrobook', 'oper': 'getShortestPath','sdid1': from_station, 'sdid2': dataset[row]['id'],'mid': '2','whatToMinimize': '0'}
table = requests.post('https://metrobook.ru/kcmsajax.php', data=settings, headers=headers).json()
dataset[row]['changeTime'] = table['table']['changeTime']
dataset[row]['changeNumber'] = table['table']['changeNumber']
dataset[row]['transitTime'] = table['table']['transitTime']
dataset[row]['ans'] = table['table']['ans']
dataset[row]['ans_count'] = len(table['table']['ans'])
dataset[row]['totalTime'] = table['table']['totalTime']
df = pd.DataFrame(dataset)
df.changeTime = df.changeTime / 60
df.totalTime = df.totalTime / 60
df.transitTime = df.transitTime / 60
df[(df.totalTime < 30) & (df.changeNumber <= 2)]
```АМ
for
import requests
from bs4 import BeautifulSoup as bs
import re
import pandas as pd
dataset = []
headers = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
# ID станции от которой ищем время
from_station = 239
url = 'https://metrobook.ru/'
webpage = requests.get(url, headers)
response = BeautifulSoup(webpage.content, 'html.parser')
main__div = response.find_all('div', class_='stName')
for data in main__div:
station_id = data.find('span', class_='stName').get('mb_sd_id')
station = data.find('span', class_='stName').get_text()
station = re.search("[^(\n|\r)]+", station).group()
station = station.replace("\xa0"," ").strip()
dataset.append({
"id": station_id,
"stName": station})
for row in range(len(dataset)):
settings = {'mod': 'metrobook', 'oper': 'getShortestPath','sdid1': from_station, 'sdid2': dataset[row]['id'],'mid': '2','whatToMinimize': '0'}
table = requests.post('https://metrobook.ru/kcmsajax.php', data=settings, headers=headers).json()
dataset[row]['changeTime'] = table['table']['changeTime']
dataset[row]['changeNumber'] = table['table']['changeNumber']
dataset[row]['transitTime'] = table['table']['transitTime']
dataset[row]['ans'] = table['table']['ans']
dataset[row]['ans_count'] = len(table['table']['ans'])
dataset[row]['totalTime'] = table['table']['totalTime']
df = pd.DataFrame(dataset)
df.changeTime = df.changeTime / 60
df.totalTime = df.totalTime / 60
df.transitTime = df.transitTime / 60
df[(df.totalTime < 30) & (df.changeNumber <= 2)]
```БЕ
AD
БЕ
AD
AD
for
import requests
from bs4 import BeautifulSoup as bs
import re
import pandas as pd
dataset = []
headers = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
# ID станции от которой ищем время
from_station = 239
url = 'https://metrobook.ru/'
webpage = requests.get(url, headers)
response = BeautifulSoup(webpage.content, 'html.parser')
main__div = response.find_all('div', class_='stName')
for data in main__div:
station_id = data.find('span', class_='stName').get('mb_sd_id')
station = data.find('span', class_='stName').get_text()
station = re.search("[^(\n|\r)]+", station).group()
station = station.replace("\xa0"," ").strip()
dataset.append({
"id": station_id,
"stName": station})
for row in range(len(dataset)):
settings = {'mod': 'metrobook', 'oper': 'getShortestPath','sdid1': from_station, 'sdid2': dataset[row]['id'],'mid': '2','whatToMinimize': '0'}
table = requests.post('https://metrobook.ru/kcmsajax.php', data=settings, headers=headers).json()
dataset[row]['changeTime'] = table['table']['changeTime']
dataset[row]['changeNumber'] = table['table']['changeNumber']
dataset[row]['transitTime'] = table['table']['transitTime']
dataset[row]['ans'] = table['table']['ans']
dataset[row]['ans_count'] = len(table['table']['ans'])
dataset[row]['totalTime'] = table['table']['totalTime']
df = pd.DataFrame(dataset)
df.changeTime = df.changeTime / 60
df.totalTime = df.totalTime / 60
df.transitTime = df.transitTime / 60
df[(df.totalTime < 30) & (df.changeNumber <= 2)]
```БЕ
АМ
СИ
СИ
dataset[row]['changeTime'] = table['table']['changeTime']
dataset[row]['changeNumber'] = table['table']['changeNumber']
dataset[row]['transitTime'] = table['table']['transitTime']
dataset[row]['ans'] = table['table']['ans']
dataset[row]['ans_count'] = len(table['table']['ans'])
dataset[row]['totalTime'] = table['table']['totalTime']
table = requests.post('https://metrobook.ru/kcmsajax.php', data=settings, headers=headers).json()
- положили)БЕ
dataset[row]['changeTime'] = table['table']['changeTime']
dataset[row]['changeNumber'] = table['table']['changeNumber']
dataset[row]['transitTime'] = table['table']['transitTime']
dataset[row]['ans'] = table['table']['ans']
dataset[row]['ans_count'] = len(table['table']['ans'])
dataset[row]['totalTime'] = table['table']['totalTime']
table = requests.post('https://metrobook.ru/kcmsajax.php', data=settings, headers=headers).json()
- положили)ds = dataset[:2]
(ds)
Out:[{'id': '66', 'stName': 'Новослободская'},
{'id': '67', 'stName': 'Менделеевская'}]
Поcле перебора id в POST-запросах получил JSON (изменил код для наглядности)ds2 = []JSON с ответом по ID выглядит так:
for row in range(len(ds)):
settings = {'mod': 'metrobook', 'oper': 'getShortestPath',
'sdid1': from_station, 'sdid2': ds[row]['id'],
'mid': '2','whatToMinimize': '0'}
table = requests.post('https://metrobook.ru/kcmsajax.php', data=settings, headers=headers).json()
ds2.append(table['table'])
print(table)Out:
{'success': True,Отсюда нужен только словарь table:
'totalCount': 0,
'table': {'changeTime': 120,
'changeNumber': 1,
'transitTime': 1140,
'ans': [239, 238, 132, 206, 88, 101, 226, 225, 67],
'totalTime': 1260},
'errors': []}
print(table['table'])Out:
{'changeTime': 120,В цикле выше я добавил словарь table в отдельный список:
'changeNumber': 1,
'transitTime': 1140,
'ans': [239, 238, 132, 206, 88, 101, 226, 225, 67],
'totalTime': 1260}
print(ds2)Out:
[{'changeTime': 240,
'changeNumber': 1,
'transitTime': 1140,
'ans': [239, 238, 132, 206, 88, 86, 89, 91, 66],
'totalTime': 1380},
{'changeTime': 120,
'changeNumber': 1,
'transitTime': 1140,
'ans': [239, 238, 132, 206, 88, 101, 226, 225, 67],
'totalTime': 1260}]
Теперь нужно расширить словари в ds
словарями из ds2
. Это я и спрашивал выше , как объединить, т.к. не сообразил самостоятельно и сделал именно добавлением "по шагам".df = pd.DataFrame(ds)
df2 = pd.DataFrame(ds2)
df3 = pd.merge(left=df, right=df2, on="id")
СИ
ds = dataset[:2]
(ds)
Out:[{'id': '66', 'stName': 'Новослободская'},
{'id': '67', 'stName': 'Менделеевская'}]
Поcле перебора id в POST-запросах получил JSON (изменил код для наглядности)ds2 = []JSON с ответом по ID выглядит так:
for row in range(len(ds)):
settings = {'mod': 'metrobook', 'oper': 'getShortestPath',
'sdid1': from_station, 'sdid2': ds[row]['id'],
'mid': '2','whatToMinimize': '0'}
table = requests.post('https://metrobook.ru/kcmsajax.php', data=settings, headers=headers).json()
ds2.append(table['table'])
print(table)Out:
{'success': True,Отсюда нужен только словарь table:
'totalCount': 0,
'table': {'changeTime': 120,
'changeNumber': 1,
'transitTime': 1140,
'ans': [239, 238, 132, 206, 88, 101, 226, 225, 67],
'totalTime': 1260},
'errors': []}
print(table['table'])Out:
{'changeTime': 120,В цикле выше я добавил словарь table в отдельный список:
'changeNumber': 1,
'transitTime': 1140,
'ans': [239, 238, 132, 206, 88, 101, 226, 225, 67],
'totalTime': 1260}
print(ds2)Out:
[{'changeTime': 240,
'changeNumber': 1,
'transitTime': 1140,
'ans': [239, 238, 132, 206, 88, 86, 89, 91, 66],
'totalTime': 1380},
{'changeTime': 120,
'changeNumber': 1,
'transitTime': 1140,
'ans': [239, 238, 132, 206, 88, 101, 226, 225, 67],
'totalTime': 1260}]
Теперь нужно расширить словари в ds
словарями из ds2
. Это я и спрашивал выше , как объединить, т.к. не сообразил самостоятельно и сделал именно добавлением "по шагам".df = pd.DataFrame(ds)
df2 = pd.DataFrame(ds2)
df3 = pd.merge(left=df, right=df2, on="id")
БЕ
ds.append(ds2)
Поэтому добавил все атрибуты отдельно. Если есть решение без пандаса - буду рад :)