【发布时间】:2021-03-13 17:11:42
【问题描述】:
所以我遇到了无法将两个字典合并到一个字典中的问题。这是我的代码:
def create_app():
app = Flask(__name__)
@app.route('/', methods=['POST'])
def index():
news_site = request.get_json()
print(news_site)
scrapdata = {}
scrapdata2 = {}
if news_site.get('kompas', True) and news_site.get('detik', True) == True:
scrapdata = kompas_fun()
scrapdata2 = detik_fun()
fscrapdata = {**scrapdata, **scrapdata2}
return jsonify(fscrapdata)
elif news_site.get('kompas', True) == False:
scrapdata = detik_fun()
fscrapdata = {**scrapdata}
return jsonify(fscrapdata)
elif news_site.get('detik', True) == False:
scrapdata = kompas_fun()
fscrapdata = {**scrapdata}
return jsonify(fscrapdata)
else:
return jsonify({'value': 'error'})
return app
当输入与if 条件匹配时,它只返回scrapdata2 字典,而不是合并scrapdata 和scrapdata2。所以结果就是scrapdata2字典
我已经尝试了How do I merge two dictionaries in a single expression in Python (taking union of dictionaries)? 的解决方案,但仍然无法正常工作。或者使用reduce、update 和ChainMap,但还是不行。
编辑:对于输入,我使用的是使用 json 的 Postman,这是输入:
{
"kompas":true,
"detik":true
}
这是我上面代码的输出,但我只从输出的许多字典中发布了几个:
{
"data": [
{
"author": "Sachril Agustin Berutu",
"category": "detikNews",
"content": "Beredar dokumen hasil tes swab Habib Rizieq Shihab (HRS) positif Corona. Wali Kota Bogor Bima Arya mengaku tidak mengetahui apakah dokumen tes swab Habib Rizieq itu asli atau palsu., \"Kita tidak bisa pastikan itu asli apa palsu,\" kata Bima saat dihubungi, Rabu (2/12/2020)., \n",
"date": "02 Des 2020",
"headline": "\nDialog 212 Dimulai, Habib Rizieq Hadir di Lokasi Terpisah\n",
"link": "https://news.detik.com/berita/d-5277968/dialog-212-dimulai-habib-rizieq-hadir-di-lokasi-terpisah",
"tag": "habib rizieq",
"time": "09:58 WIB",
"total comment": "240"
},
{
"author": "Achmad Dwi Afriyadi",
"category": "detikFinance",
"content": "Industri hulu migas merupakan industri yang penuh ketidakpastian. Untuk menarik investasi, pemerintah berupaya mengurangi ketidakpastian tersebut., Menteri ESDM Arifin Tasrif mengatakan, ketidakpastian sendiri berasal eksternal dan internal.",
"date": "02 Des 2020",
"headline": "\nCara Pemerintah 'Manjakan' Investor Migas\n",
"link": "https://finance.detik.com/energi/d-5278096/cara-pemerintah-manjakan-investor-migas",
"tag": "migas",
"time": "11:18 WIB",
"total comment": "0"
}
],
"news_portal": "detik"
}
kompas_fun() 和 detik_fun() 从两个新闻网站的网络抓取中返回字典。但仅来自detik_fun() 的输出。 kompas_fun() 有效并返回一个列表,但未与来自 detik_fun 的结果合并。
这是从kompas_fun()结束的,它将结果附加并转换为字典:
arti.append({
'headline': title,
'content':content,
'writer': writer,
'editor': editor,
'category' : cat,
'tag' : tag1,
'total comment': comment,
'date': dates,
'time': times,
'read count': rcount,
'link': lnk
})
df = pd.DataFrame(arti)
list_dct = df.to_dict(orient='records')
dct = {"date": scrapdate, 'news_portal': 'kompas', "data": list_dct}
return dct
来自detik_fun() 与上面相同。不同的只是 `'news_portal': 'detik'。
任何帮助将不胜感激。
【问题讨论】:
-
你能展示一个输入和输出的例子吗?
-
kompas_fun()的回复是什么? -
试试这个
fscrapdata = {k:v for k, v in scrapdata.items()+scrapdata2.items()} -
scrapdata和scrapdata2有相同的键吗? -
@neilharia7 编辑了我的帖子
标签: python