下面的内容需要多行用户输入,例如“英语鲍勃·卢克”,以便在字典中存储一组关于哪些人使用哪种语言的信息。我使用了一个字典来保存多行输入来创建多个集合,但是现在我需要比较它们之间的差异,看看某人是否只会说一种语言。
languages = {}
while True:
info = input('Line: ').split()
if info != []:
languages[info[0]] = set(info[1:])
else:
break我可以用下面的代码打印这些集,但它似乎并没有给我带来任何东西!
for tongue in languages:
print(set(languages[tongue]))完全卡住了-任何帮助都将是非常感谢的!
更新
在这里,我正在努力实现的目标如下:
Line: English Tim Nicky James John Ben
Line: German Nicky Tim Tara
Line: Mandarin Tim John
Line:
James is monolingual.
Tara is monolingual.
Ben is monolingual.溶液
完全重温我的方法,抛弃“字典”!
english = input("Line: ").split()
en_speakers = set(english[1:len(english)])
multi_speakers = set()
while True:
language = input("Line: ").split()
lan_speakers = language[1:len(language)]
if language == []:
break
else:
multi_speakers |= set(lan_speakers)
monolinguals = en_speakers.difference(multi_speakers)
for person in monolinguals:
print(person, 'is monolingual.')
if multi_speakers == en_speakers:
print ('Everyone is multilingual!')发布于 2014-11-12 10:39:40
我会颠倒字典中键和值的顺序,因为它使问题变得容易得多。因此,与其将说这种语言的不同用户存储在每种语言中,不如创建一个人说的所有语言的每个用户配置文件:
from collections import defaultdict
user_langs = defaultdict(list)
while True:
info = map(lambda s: s.strip(), raw_input('Line: ').split())
if info:
for user in info[1:]:
user_langs[user].append(info[0])
else:
break
for user in user_langs:
if len(user_langs[user]) < 2:
print("{} is monolingual.".format(user))发布于 2014-11-12 10:18:18
languages[toungue]已经是一个集合,您不需要set(languages[touge])。另外,您不需要循环字典,只需通过lanuages.values()从字典中获得这些设置即可。
但不完全确定你想在这里实现什么。粗略地猜测,您可能希望从语言值中获得唯一的值?
可以通过将值更新到新集来实现这一点:
改变这一点:
for tongue in languages:
print(set(languages[tongue]))对此:
new_set = set()
for v in languages.values():
new_set.update(v)
new_set # dummy lanugages
{'English', 'Japanese', 'whatever', 'yeah'}已更新
要实现您想要的结果,您可以使用计数器并返回键if值== 1。
更详细的解释是,在for/loop下,您将将1集与另一组进行比较。但是您真正需要的是比较所有的集合,所以我选择使用c来更新for/loop下的所有单独的集合值,然后从这个c中做您想做的任何事情。如果任何人只有一种语言,我在这里使用Counter作为您想要计算的。
from collections import Counter
c = Counter()
for v in languages.values():
c.update(v)
for k,v in c.iteritems():
if v == 1:
print k, " is monolingual"
Ben is monolingual
James is monolingual
Tara is monolingualc看起来如下所示:
c
Counter({'Tim': 3, 'Nicky': 2, 'John': 2, 'Ben': 1, 'James': 1, 'Tara': 1})https://stackoverflow.com/questions/26884031
复制相似问题