社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

hc_dev

hc_dev 最近创建的主题
hc_dev 最近回复了
3 年前
回复了 hc_dev 创建的主题 » 有没有办法在python字典和列表中对值进行分组?

自我实现的方式是使用for循环,并添加到所需的结构中。

您还可以使用标准库中的模块 itertools.groupby , 当输入被排序时 (之前)。

分组

from itertools import groupby

lst = [
   {'Amount': 13.5, 'Name': 'Amy', 'date': '2022-01-30'}, 
   {'Amount': 15, 'Name': 'Bob', 'date': '2022-01-30'}, 
   {'Amount': 13.5, 'Name': 'Cara', 'date': '2022-01-31'}
]
keyfunc = lambda x: x['date']  # extracting the key for sort and group

groups = []
uniquekeys = []

data = sorted(lst, key=keyfunc)  # required for groupby
for k, g in groupby(data, keyfunc):
    groups.append({'date': k, 'details': list(g)})  # Store group iterator as a list
    uniquekeys.append(k)

print(groups)

印刷品:

[{'date': '2022-01-30', 'details': [{'Amount': 13.5, 'Name': 'Amy', 'date': '2022-01-30'}, {'Amount': 15, 'Name': 'Bob', 'date': '2022-01-30'}]}, {'date': '2022-01-31', 'details': [{'Amount': 13.5, 'Name': 'Cara', 'date': '2022-01-31'}]}]

取下钥匙

自从你的输出在 details 不只是一个分组列表,而是删除了键(用于分组方式),我们需要进行一些调整:

from itertools import groupby

lst = [
   {'Amount': 13.5, 'Name': 'Amy', 'date': '2022-01-30'}, 
   {'Amount': 15, 'Name': 'Bob', 'date': '2022-01-30'}, 
   {'Amount': 13.5, 'Name': 'Cara', 'date': '2022-01-31'}
]
keyfunc = lambda x: x['date']  # extracting the key for sort and group

groups = []

data = sorted(lst, key=keyfunc)  # required for groupby
for k, g in groupby(data, keyfunc):
    # remove the key from grouped list
    removed_key = []
    for v in list(g):
        del v['date']
        removed_key.append(v)
    # add to groups  
    groups.append({'date': k, 'details': removed_key})

print(groups)

所需打印:

[{'date': '2022-01-30', 'details': [{'Amount': 13.5, 'Name': 'Amy'}, {'Amount': 15, 'Name': 'Bob'}]}, {'date': '2022-01-31', 'details': [{'Amount': 13.5, 'Name': 'Cara'}]}]

根据所需的文件时间戳,例如,请参见:

How to get the first accessed time file was created along with the last modified time?

举个粗略的例子:

  • 打印temp文件夹中的所有文件(基于OS的环境变量)及其最后修改的时间戳
import os

def list_files(folder):
    # your attempt
    return os.listdir(folder)


folder = os.getenv('TEMP')
for filename in list_files(folder):
    last_modified = os.path.getmtime(filename)
    print(f"{filename} last modified: {last_modified}")

打印出如下几行:

.Xdefaults上次修改:1531860388.7936974

.gnome上次修改:1588427978.179283