Попытка получить уникальный список значений из словаря

У меня есть словарь, который имеет структуру, подобную:

{
    '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, которые упрощают работу с данными и исследованиями.


1
72
2

Ответы:

Решено

Из документации:

Возвращает список уникальных элементов из заданной итерации.

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>

Выход: