У меня есть словарь, который имеет структуру, подобную:
{
'id': 16,
'name': 'something',
'client': 'client1',
},
{
'id': 17,
'name': 'something',
'client': 'client2',
},
{
'id': 18,
'name': 'something-else',
'client': 'client3',
}
Я могу перебирать свои словари в своих шаблонах, но в этом случае я пытаюсь получить уникальные значения name
. Я попробовал пару разных вариантов, таких как:
{% for name in data | unique %}
или
{% for name in data.name | unique %}
но ничто из этого не возвращает мне список уникальных имен.
Как лучше всего это сделать? Я думал о создании собственного фильтра, но мне интересно, есть ли лучший способ сделать это.
🤔 А знаете ли вы, что...
В Python есть среды разработки, такие как Jupyter Notebook, которые упрощают работу с данными и исследованиями.
Из документации:
Возвращает список уникальных элементов из заданной итерации.
case_sensitive
– Рассматривайте строки верхнего и нижнего регистра как отдельные.
attribute
– Фильтровать объекты с уникальными значениями этого атрибута.
Поскольку вы хотите исключить дубликаты на основе значения аргумента name
, вам следует установить аргумент attribute
соответствующим образом:
{% for name in data | unique(attribute = "name") %}
Я предполагаю, что data
— это list
, содержащий множество словарей, в том числе и три вышеперечисленных. Следующее будет работать, если вы хотите, чтобы значение ключа «имя» было уникальным.
У меня мало знаний в dict
, так как большую часть вещей я делаю в самом flask. Почему бы нам не поступить таким образом, который дает аналогичный результат?
файл Python (колба):
from flask import Flask, render_template, request
app = Flask(__name__)
data = [{
'id': 16,
'name': 'something',
'client': 'client1',
},
{
'id': 17,
'name': 'something',
'client': 'client2',
},
{
'id': 18,
'name': 'something-else',
'client': 'client3',
},
{
'id': 19,
'name': 'One more',
'client': 'client4',
}
]
result = []
for i, x in enumerate(data):
sub = data[:i] + data[i+1:]
ls = [y['name'] for y in sub]
if x['name'] not in ls: result.append(x)
@app.route('/')
def provide_dict():
if request.method == 'GET':
return render_template('index.html', data = result)
if __name__ == '__main__': app.run()
ДЖИНДЖА2:
<!DOCTYPE html>
<html lang = "en">
<body>
<table>
{% for x in data %}
{% for key, value in x.items() %}
<tr>
<th> {{ key }} </th>
<td> {{ value }} </td>
</tr>
{% endfor %}
{% endfor %}
</table>
<br>
</body>
</html>
Выход: