首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较Python词典中的集合

比较Python词典中的集合
EN

Stack Overflow用户
提问于 2014-11-12 09:57:41
回答 2查看 125关注 0票数 1

下面的内容需要多行用户输入,例如“英语鲍勃·卢克”,以便在字典中存储一组关于哪些人使用哪种语言的信息。我使用了一个字典来保存多行输入来创建多个集合,但是现在我需要比较它们之间的差异,看看某人是否只会说一种语言。

代码语言:javascript
复制
languages = {}
while True:
  info = input('Line: ').split()
  if info != []:
    languages[info[0]] = set(info[1:])
  else:
    break

我可以用下面的代码打印这些集,但它似乎并没有给我带来任何东西!

代码语言:javascript
复制
for tongue in languages:
  print(set(languages[tongue]))

完全卡住了-任何帮助都将是非常感谢的!

更新

在这里,我正在努力实现的目标如下:

代码语言:javascript
复制
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.

溶液

完全重温我的方法,抛弃“字典”!

代码语言:javascript
复制
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!')
EN

回答 2

Stack Overflow用户

发布于 2014-11-12 10:39:40

我会颠倒字典中键和值的顺序,因为它使问题变得容易得多。因此,与其将说这种语言的不同用户存储在每种语言中,不如创建一个人说的所有语言的每个用户配置文件:

代码语言:javascript
复制
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))
票数 1
EN

Stack Overflow用户

发布于 2014-11-12 10:18:18

languages[toungue]已经是一个集合,您不需要set(languages[touge])。另外,您不需要循环字典,只需通过lanuages.values()从字典中获得这些设置即可。

但不完全确定你想在这里实现什么。粗略地猜测,您可能希望从语言值中获得唯一的值?

可以通过将值更新到新集来实现这一点:

改变这一点:

代码语言:javascript
复制
for tongue in languages:
  print(set(languages[tongue]))

对此:

代码语言:javascript
复制
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作为您想要计算的。

代码语言:javascript
复制
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 monolingual

c看起来如下所示:

代码语言:javascript
复制
c
Counter({'Tim': 3, 'Nicky': 2, 'John': 2, 'Ben': 1, 'James': 1, 'Tara': 1})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26884031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档