【问题标题】:Python: Compute "group-id" for list of tuplesPython:计算元组列表的“group-id”
【发布时间】:2017-07-26 02:25:24
【问题描述】:

我有一个元组列表:

tups = [("A","a"), ("A","b"), ("A", "c"), ("B", "a"), ("B", "b"), ("C", "a"), ("L", "a")]

我想计算某事。就像每个元组的组 ID。 IE。 (伪代码):

("A", "a") --> 11

("A", "b") --> 12

("A", "c") --> 13

("B", "a") --> 21

("B", "b") --> 22

("C", "a") --> 31

("L", "a") --> 121

我试图将我的元组转换为具有多索引的 pandas df,但我不知道如何计算 id。我只发现了 DataFrameGroupBy.grouper 类的一种相当晦涩的方法。有人吗?

编辑

实际的元组包含一个 locationname-streetname 对,即("Summervillage", "Longstreet")。因此,相同的位置应该有一个 id,街道名称也是如此。 group-id 应该是两者的组合。我不确定如何进一步澄清这一点。

编辑 2

由于不鼓励在 stackoverflow 上删除带有答案的问题,因此进行另一个编辑:

("Summervillage", "Longstreet") --> id 1_1
("Summervillage", "Shortstreet") --> id 1_2
("Summervillage", "Nicestreet") --> id 1_3
("Wintertown", "Somestreet") --> id 2_1
("Wintertown", "Midstreet") --> id 2_2
("Bigcity", "Darkalley") --> id 3_1

因此,group-id 应该为每个城市包含一个数字,为​​每个城市的每条独特街道包含一个数字。

【问题讨论】:

  • 这些“id”到底是什么?任意数字?
  • 不清楚你在问什么,但我认为你需要类似Hoffman Code
  • 从给出的例子中,我相信第一个位置是大写字母,第二个是小写字母。 ID 是通过“连接”每个字母的位置构成的,因此 ("L", "a") 是 121,因为 L 是字母表中的第 12 个字母,而 a 是第一个。编辑添加:我们不会有 ID-collision with ID 121 也可能是 ("A", "v") 也许这需要重新思考...
  • @seventyeightist 在编码后我们会遇到歧义,因为 121 可能是 la 或 au(12-1 或 1-21)
  • @TemporalWolf 是的,但鉴于提供的示例 (imo),这是唯一有意义的编码。因此我对 ID-collision 的评论!

标签: python


【解决方案1】:

神秘问题得到神秘答案:

import string

tups = [("A", "a"), ("A", "b"), ("A", "c"), ("B", "a"),
        ("B", "b"), ("C", "a"), ("L", "a")]

ids = {tup: (str(string.ascii_uppercase.index(tup[0]) + 1) +
             str(string.ascii_lowercase.index(tup[1]) + 1))
       for tup in tups}

print(ids)
# {('B', 'b'): '22', ('A', 'a'): '11', ('A', 'b'): '12',
#  ('B', 'a'): '21', ('C', 'a'): '31', ('L', 'a'): '121', ('A', 'c'): '13'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2012-06-14
    相关资源
    最近更新 更多