2017-03-06 19 views
-3

我有元组的列表:的Python:计算“组ID”的元组的列表

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

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

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

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

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

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

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

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

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

我试图把我的元组成大熊猫DF具有多指标,但我并没有弄清楚如何计算IDS。我只用DataFrameGroupBy.grouper类找到了一个相当模糊的方法。任何人?

编辑

实际元组包含一个LOCATIONNAME-streetname对,即("Summervillage", "Longstreet")。所以相同的地点应该得到一个ID,街道名称也是如此。 group-id应该是两者的组合。我不知道如何进一步澄清这一点。

编辑2

由于删除与答案的问题是在计算器气馁,另一个编辑:

("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 

所以组ID应包含每个每个城市一个数字和一个每个城市独特的街道。

+2

怎么会和 “IDS” 到底是什么?一个任意数字? – DeepSpace

+0

目前还不清楚你在问什么,但我认为你需要像'霍夫曼代码' – Arman

+0

从给出的例子我相信有一个大写字母在第一个位置和一个小写字母在第二个。该ID由“连接”每个字母的位置组成,所以(“L”,“a”)是121,因为L是字母表中的第12个字母,a是第一个。编辑补充说:我们不会有身份证与ID 121冲突也可能是(“A”,“V”)也许这需要重新思考... – seventyeightist

回答

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'}