我有一个单词列表及其含义:
wm = ['mendacious',
'dishonest',
'mendicant',
'beggar',
'meretricious',
'gaudy; specious; falsely attractive',
'mesmerize',
'to hypnotize',
'metamorphosis',
'change; transformation']
每个词都有其含义。因此mendacious
表示dishonest
,mendicant
表示beggar
,依此类推。具有多重含义的单词的含义由;
分隔。例如' meretricious'有意义gaudy; specious; falsely attractive
。
我想要做的是组合词义对,这样我的最终列表就是这样:
['mendacious : dishonest','mendicant : beggar','meretricious : gaudy; specious; falsely attractive','mesmerize : to hypnotize', 'metamorphosis : change; transformation']
我该怎么做?
答案 0 :(得分:1)
你需要成对地对列表进行迭代,并且通过zip
同一个iter
中的2个来实现这一点:
>>> i = iter(wm)
>>> [' : '.join(s) for s in zip(i, i)]
['mendacious : dishonest',
'mendicant : beggar',
'meretricious : gaudy; specious; falsely attractive',
'mesmerize : to hypnotize',
'metamorphosis : change; transformation']
答案 1 :(得分:1)
您可以使用以下代码创建元组列表:
tl = zip(wm[0::2], wm[1::2])
此列表如下所示:
[('mendacious', 'dishonest'), ('mendicant', 'beggar'), ('meretricious', 'gaudy; specious; falsely attractive'), ('mesmerize', 'to hypnotize'), ('metamorphosis', 'change; transformation')]
然后你可以迭代这个列表并连接每个元组。
output = map(lambda t: t[0] + ':' + t[1], tl)
output = [':'.join(t) for t in tl]
答案 2 :(得分:1)
一种pythonic方式:
res = ["%s : %s" % (wm[i], wm[i+1]) for i in range(0, len(wm), 2)]
print(res)
['mendacious : dishonest','mendicant : beggar','meretricious : gaudy; specious; falsely attractive','mesmerize : to hypnotize', 'metamorphosis : change; transformation']
答案 3 :(得分:1)
我的回答与AChampion的非常相似:
wm = [
'mendacious',
'dishonest',
'mendicant',
'beggar',
'meretricious',
'gaudy; specious; falsely attractive',
'mesmerize',
'to hypnotize',
'metamorphosis',
'change; transformation'
]
a = list(map(' : '.join, zip(*[iter(wm)] * 2)))
print(a)
这段代码可能有点神秘,所以我会尝试解释发生了什么。
iter(wm)
从wm
创建iterator个对象。正如文档所说,这是
表示数据流的对象。反复拨打电话 迭代器的
__next__()
方法(或将其传递给内置函数next()
)返回流中的连续项。
然后我们复制迭代器和zip
它。这允许我们并行迭代迭代器对中的项。但是我们实际上没有两个独立的迭代器:我们有两个对一个迭代器对象的引用,所以我们得到的是wm
中的连续项对。 FWIW,这项技术在How do you split a list into evenly sized chunks?中进行了讨论。
我们使用map
在' : '.join
生成的每个字符串元组上调用zip
方法。最后,我们使用list
将map
返回的可迭代转换为列表(在Python 2中,由于Python 2 map
返回列表,因此不需要此步骤。)< / p>
我们可以使用相同的技术来生成字典而不是列表。字典对于这些数据来说是一个更有用的结构。
d = {k: v for k, v in zip(*[iter(wm)] * 2)}
print(d)
<强>输出强>
{'metamorphosis': 'change; transformation', 'mendicant': 'beggar', 'mendacious': 'dishonest', 'mesmerize': 'to hypnotize', 'meretricious': 'gaudy; specious; falsely attractive'}
我们可以将v
字符串拆分成列表,这样可以更轻松地获取单个字词:
d = {k: v.split('; ') for k, v in zip(*[iter(wm)] * 2)}
print(d)
<强>输出强>
{'mendacious': ['dishonest'], 'mesmerize': ['to hypnotize'], 'meretricious': ['gaudy', 'specious', 'falsely attractive'], 'metamorphosis': ['change', 'transformation'], 'mendicant': ['beggar']}