python - API 给出 TypeError: unhashable type: 'dict'
问题描述
我正在开发一个 django-rest-framework API,我在其中对 VectorWise 数据库进行一些 SQL 查询和计算,并通过获取某些输入参数来创建响应。
起初,我的回复有这样的结构:
response = {'Date': input_date,
'Date comparable': date_comparable,
'CA': {
'CA TTC (€)': ca_ttc_n,
'Rang magasin': rank,
'progression (%)': progression_percentage
},
'Nb art / pass caisse': {
'nombre': nb_art_pass_caiss,
'progression (%)': nb_art_pass_caiss_prog
},
'Panier': {
'(€)': panier,
'progression (%)': prog_panier}
}
哪个工人很好,给我回复。
然后,我尝试改进响应的代码结构和可读性,如下所示:
response = {'Date': input_date,
'Comparable date': date_comparable,
'Indicators': {
{"Name": "sales",
"Value": ca_ttc_n,
"Unit": currency,
"Rank": rank},
{"Name": "sales_progression",
"Value": progression_percentage,
"Unit": percentage,
"Rank": rank},
{"Name": "customer_items_number",
"Value": nb_art_pass_caiss,
"Unit": "Units",
"Rank": rank},
{"Name": "customer_items_number_progression",
"Value": nb_art_pass_caiss_prog,
"Unit": percentage,
"Rank": rank},
{"Name": "basket",
"Value": panier,
"Unit": currency,
"Rank": rank}
}
另一方面,这会不断抛出 TypeError 的错误
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\rest_framework\views.py", line 495, in dispatch
response = self.handle_exception(exc)
File "C:\ProgramData\Anaconda3\lib\site-packages\rest_framework\views.py", line 455, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\ProgramData\Anaconda3\lib\site-packages\rest_framework\views.py", line 466, in raise_uncaught_exception
raise exc
File "C:\ProgramData\Anaconda3\lib\site-packages\rest_framework\views.py", line 492, in dispatch
response = handler(request, *args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\rest_framework_extensions\cache\decorators.py", line 49, in inner
kwargs=kwargs,
File "C:\ProgramData\Anaconda3\lib\site-packages\rest_framework_extensions\cache\decorators.py", line 68, in process_cache_response
response = view_method(view_instance, request, *args, **kwargs)
File "C:\Users\10124077\Projects\dataplatform--web--api\wdc\views.py", line 484, in get
"Rank": rank}
TypeError: unhashable type: 'dict'
我尝试删除 rank 字段并进行一些操作以更好地理解该问题,但我没有设法做到这一点,因为它不断在响应正文的其他字段上引发 TypeError !有什么帮助吗?
解决方案
问题在于:
'Indicators': {
{"Name": "sales",
"Value": ca_ttc_n,
"Unit": currency,
"Rank": rank},
{"Name": "sales_progression",
"Value": progression_percentage,
"Unit": percentage,
"Rank": rank},
{"Name": "customer_items_number",
"Value": nb_art_pass_caiss,
"Unit": "Units",
"Rank": rank},
{"Name": "customer_items_number_progression",
"Value": nb_art_pass_caiss_prog,
"Unit": percentage,
"Rank": rank},
{"Name": "basket",
"Value": panier,
"Unit": currency,
"Rank": rank}
}
...尝试创建一组字典。所以,你的代码基本上是这样做的:
{{"this": "is", "a": "dictionary"}, {"within": "a set"}}
这是无法做到的,因为只能构造一组可散列对象,而dict
s 不可散列。您可以在 docs 中了解“可散列”的含义。但是,您可以使用字典列表:
"Indicators": [
{'Name': ..., 'Value': ...},
{'Name': ..., 'Value': ...},
...
]
推荐阅读
- sql - 使用截至日期的慢聚合
- android - Android中获取和修改自定义视图类的属性
- r - 如何在 rmarkdown 中正确对齐数学方程?
- vba - 将文件保存在指定文件夹中
- python - 无法在 python 中加载 json 文件(json discord.py)
- python - Python,合并具有相同id的行 - 日期但在一列中具有不同的值
- python - 如何在 tkinter 中仅向输入字段添加底部边框?
- python - 在 sigmoid 曲线上找到点
- python - 无法在 python 中使用字符串格式获得所需的输出
- swift - Swift 和 Firebase 中的多个 if let 语句