将词分成字母词典rxpy

时间:2017-11-05 18:17:48

标签: python rx-py

我正在学习RxPY,所以我需要编写一些代码,这些代码可以按照第一个字符分割每个单词。 结果必须如下所示:

from rx import Observable , Observer

list =['A', 'The', 'the', 'LAZY', 'Low']

o = Observable . from_ ( list )\
. filter (lambda i: i[0] == 'A' or 'Z' )\

words = o.map(lambda s: s.lower().split())

word_each = words.flat_map(lambda s: s)

ss = word_each.to_dict(lambda x: x[:1], lambda x : x)\
    .subscribe(lambda val: print(val))

我尝试了什么。

[CLOSED]

那么,我该如何解决这个问题呢?我正在考虑用它的第一个字符对每个单词进行分组,但我不知道如何。

Error running MyActivityName: The activity must be exported or contain an intent-filter

4 个答案:

答案 0 :(得分:1)

我对RxPy一无所知,但你可以使用dict和list comps在vanilla python的一行中做到这一点

  d = {el[0].lower(): [e.lower() for e in lst if e[0].lower() == el[0].lower()] for el in lst}

答案 1 :(得分:1)

使用rx,如果你真的想以困难的方式做到这一点

dict(result)

使用Chiheb Nexus'中所示的list如果您需要以字典的形式提供答案,请回答。

我将my_list的名称更改为>>> my_list =['A', 'The', 'the', 'LAZY', 'Low'] >>> from itertools import groupby >>> {key: list(val) for (key, val) in groupby(sorted(my_list), key=lambda x: x[0].lower())} {'a': ['A'], 't': ['The', 'the'], 'l': ['LAZY', 'Low']}

-DCMAKE_BUILD_TYPE=

答案 2 :(得分:0)

您可以使用defaultdict模块完成任务。这是一个例子:

from collections import defaultdict
my_list = ['A', 'The', 'the', 'LAZY', 'Low']

def split_words(a):
    b = defaultdict(list)
    for k in a:
        b[k[0].lower()].append(k.lower())
    return b

>>> split_words(my_list)
    defaultdict(list, {'a': ['a'], 'l': ['lazy', 'low'], 't': ['the', 'the']})
>>> dict(split_words(my_list))
    {'a': ['a'], 'l': ['lazy', 'low'], 't': ['the', 'the']}

答案 3 :(得分:0)

使用RxPy v6更新2019年5月

RxPy 在执行这些类型的转换时确实很出色(尽管您可以同样地在纯Python中应用实用的解决方案)。

这是一个简单的解决方案:

from rx import Observable

list = ['A', 'The', 'the', 'LAZY', 'Low']

Observable.from_(list) \
    .map(lambda s: s.lower()) \
    .group_by(lambda s: s[0]) \
    .flat_map(lambda grp: grp.to_list()) \
    .to_dict(lambda grp: grp[0][0], lambda grp: grp) \
    .subscribe(print)

根据要求输出:

# {'a': ['a'], 't': ['the', 'the'], 'l': ['lazy', 'low']}

“算法”为:

  • 使单词列表可观察。
  • 映射每个单词并转换为小写。
  • 将每个单词的首字母分组。
  • 在将每个分组转换为列表时,请使用平面图进行嵌套。此时,临时结果如下:

    ['a']
    ['the', 'the']
    ['lazy', 'low']
    
  • 现在,使用to_dict运算符将其转换为单个词典,其键是每个分组(列表)中第一项的首字母。

  • 订阅Observable执行管道。