?如何制作二维矩阵

时间:2016-09-24 21:17:27

标签: python

我有1个词典和1个元组

 students = { 0: "Nynke", 1: "Lolle", 2: "Jikke", 3: "Popke", 4: "Teake", 5:
"Lieuwe", 6: "Tsjabbe", 7: "Klaske", 8: "Ypke", 9: "Lobke"}

friendships = [(0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (3, 4), (4, 5), (5,
6), (5, 7), (6, 8), (7, 8), (8, 9)]

我要做的第一件事就是一个二维矩阵,其中每个学生的列表与他们的朋友一样:[[1,2],[0,2,3],...,[8]] < / p>

第二件事是我必须根据我必须打印它的朋友的数量对列表进行排序,如:[(9,1),(0,2),...,(8,3)]。 9号只有1个朋友,0号有两个朋友等...

我的代码:

for i in students:
    for x in friendships:
        if students[i] == friendships(x):
            new_list.append(x)
    print(i)

1 个答案:

答案 0 :(得分:0)

不是100%肯定我完全理解你正在尝试做什么,所以如果我有错误的想法,请纠正我。但这就是我的想法,

对于第一个,你可以尝试创建一个字典来存储每个友谊

all_friends = {}
for f in friendships:
   if f[0] in all_friends:
      all_friends[f[0]] = all_friends[f[0]] + [f[1]]
   else:
      all_friends[f[0]] = [f[1]]

然后,您想要获取此词典值的列表,并且这将成为您的二维矩阵:

all_friends.values()

对于第二个,你首先需要跟踪每个人有多少友谊,为此尝试一个字典

friendships_dict = {}
for f in friendships:
   if f[0] in friendships_dict{}:
      friendships_dict[f[0]] = friendships_dict[f[0]] + 1
   else:
      friendships_dict[f[0]] = 1

然后,您想要制作一个可以排序的元组列表:

friends_list = [(f1, f2) for f1, f2 in friendships_dict.iteritems()]

sorted_friends_list = sorted(friends_list, key=lambda x: x[1])

修改

现在我更好地理解你问题的第一部分,让我继续尝试提供解决方案。

您仍然需要我包含的第一段代码:

all_friends = {}
for f in friendships:
   if f[0] in all_friends:
      all_friends[f[0]] = all_friends[f[0]] + [f[1]]
   else:
      all_friends[f[0]] = [f[1]]

然后添加以下内容:

matrix = [] 
for key in sorted(all_friends.iterkeys()):
    matrix.append(all_friends[key])

matrix将是您想要的