使用python在口述中相交多个列表

2024-09-27 09:36:16 发布

您现在位置:Python中文网/ 问答频道 /正文

这已经困扰了我一整天了。我需要发送电子邮件给不同的人,有些电子邮件可能有多个收件人,有些收件人收到多封电子邮件。你知道吗

假设我有一本这样的字典:

{
    'email4': ['msg1', 'msg4', 'msg5'], 
    'email2': ['msg1', 'msg3'], 
    'email3': ['msg1', 'msg2', 'msg4'], 
    'email1': ['msg1', 'msg2', 'msg3']
}

我想制作一些东西,比如:

{
    'email1, email2, email3, email4': ['msg1'],
    'email1, email3': ['msg2'],
    'email1, email2': ['msg3'],
    'email3, email4': ['msg4'],
    'email4': ['msg5']
}

我想这将是一个多重交叉的关键字和字典的值之类的东西,无论如何,你明白的想法。你知道吗

快速提问,如何在python中实现这一点。你知道吗

谢谢你的帮助,祝你有愉快的一天。你知道吗

更新

  1. 为什么使用电子邮件作为密钥 假设我要将电子邮件发送到电子邮件地址4,而不是在单独的电子邮件中发送msg1、msg4和msg5,我要将它们合并为一封电子邮件。你知道吗
  2. 元组键 这只是一个演示,我当然可以用元组,但那怎么解决我的问题呢?你知道吗

谢谢大家


Tags: 字典电子邮件关键字交叉收件人元组msg2email1
3条回答

第一个建议:邮件索引和收件人列表键,易于使用:

from collections import defaultdict
from pprint import pprint

data = {
    'email4': ['msg1', 'msg4', 'msg5'], 
    'email2': ['msg1', 'msg3'], 
    'email3': ['msg1', 'msg2', 'msg4'], 
    'email1': ['msg1', 'msg2', 'msg3']
}

result = defaultdict(list)

for addr, msgs in data.iteritems():
    for msg in msgs:
        result[msg].append(addr)

pprint(result)

如果您只想合并消息:

for addr, msgs in data.iteritems():
    data[addr] = '\n'.join(msgs)

print data

使用集合的^{}作为中间数据结构的示例:

#!/usr/bin/env python
# encoding: utf-8

from collections import defaultdict
from pprint import pprint

messages = { 
    'email4': ['msg1', 'msg4', 'msg5'],
    'email2': ['msg1', 'msg3'],
    'email3': ['msg1', 'msg2', 'msg4'],
    'email1': ['msg1', 'msg2', 'msg3']
}

intermediate = defaultdict(set)

for email, msgs in messages.items():
    for msg in msgs:
        intermediate[msg].add(email)

inverted = {tuple(v): k for k, v in intermediate.items()}
pprint(inverted)

# {('email2', 'email1'): 'msg3',
#  ('email3', 'email1'): 'msg2',
#  ('email4',): 'msg5',
#  ('email4', 'email2', 'email3', 'email1'): 'msg1',
#  ('email4', 'email3'): 'msg4'}

您首先需要创建一个与现在的“相反”的词汇:其中键是消息,值是收件人:

{
    'msg1': ['email1', 'email2', 'email3', 'email4'],
    'msg2': ['email1', 'email3'],
    ...

要做到这一点,你只需经历一次措辞。你知道吗

一旦你有了第二个词汇,解决你的问题就相当简单了。你知道吗

相关问题 更多 >

    热门问题