我有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)
答案 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
将是您想要的