Python-列表和排序
这是我的密码:Python-列表和排序,python,Python,这是我的密码: def dictionary(): ''' pulls the usernames and passwords from testdata.txt ''' global passwords, usernames usernames = [] passwords = [] file_open = open('testdata.txt', 'r') for accounts in file_open: userna
def dictionary():
''' pulls the usernames and passwords from testdata.txt '''
global passwords, usernames
usernames = []
passwords = []
file_open = open('testdata.txt', 'r')
for accounts in file_open:
username, password = accounts.split('\t')
password = password.strip('\n')
usernames.append(username)
passwords.append(password)
def output():
''' outputs the header for the list and computes a portion of the equations to output '''
password_data_list = []
password_frequency_total = 0
amount = 0
for password in passwords:
password_frequency_total = password_frequency_total + 1
print('{:<10}{:>17}{:>13}'.format('Password', 'Frequency', '%'))
print('=' * 40)
for password in passwords:
password_frequency = passwords.count(password)
password_frequency_percentage = ((password_frequency / password_frequency_total) * 100)
password_data = '{:<10}{:>17}{:>12.4f}%'.format(password, password_frequency, password_frequency_percentage)
password_data_list.append(password_data)
for x in password_data_list:
print(x)
def字典():
''从testdata.txt提取用户名和密码''
全局密码、用户名
用户名=[]
密码=[]
文件_open=open('testdata.txt','r')
对于打开的文件中的帐户:
用户名,密码=accounts.split('\t')
password=password.strip('\n')
usernames.append(用户名)
密码。追加(密码)
def输出():
''输出列表的标题,并计算要输出的部分方程式''
密码\数据\列表=[]
密码\频率\总数=0
金额=0
密码中的密码:
密码\频率\总数=密码\频率\总数+1
打印('{:17}{:>13}'。格式('Password','Frequency','%'))
打印('='*40)
密码中的密码:
密码\频率=密码。计数(密码)
密码频率百分比=((密码频率/密码频率总数)*100)
password_data='{:17}{:>12.4f}%'。格式(密码、密码频率、密码频率百分比)
密码\u数据\u列表。追加(密码\u数据)
对于密码\u数据\u列表中的x:
打印(x)
问:如何将频率从最大值到最小值排序?首先:始终使用
with
语句来处理文件。这将确保在您使用conext退出时正确关闭文件,例如:
with open(filename, 'r') as file:
for foo in file:
# do whatever
对于您的问题:您可以在数组中使用sort()
方法对它们进行排序。在您的情况下,您可以执行password\u data\u list.sort()
并完成。您可以使用collections.Counter
有效地计算每个密码的频率,作为密码到计数映射的dict,您可以使用它作为密钥对密码进行排序。使用循环计数密码\u频率\u总数
是不必要的,因为您只需使用密码
列表的长度:
from collections import Counter
password_frequency = Counter(passwords)
print('{:<10}{:>17}{:>13}'.format('Password', 'Frequency', '%'))
print('=' * 40)
for password in sorted(passwords, key=password_frequency.get):
password_frequency_percentage = ((password_frequency[password] / len(passwords)) * 100)
password_data = '{:<10}{:>17}{:>12.4f}%'.format(password, password_frequency, password_frequency_percentage)
password_data_list.append(password_data)
从集合导入计数器
密码\频率=计数器(密码)
打印('{:17}{:>13}'。格式('Password','Frequency','%'))
打印('='*40)
对于排序中的密码(密码,key=password\u frequency.get):
密码频率百分比=((密码频率[密码]/len(密码))*100)
password_data='{:17}{:>12.4f}%'。格式(密码、密码频率、密码频率百分比)
密码\u数据\u列表。追加(密码\u数据)
旁白:这些统计数据是否准确,存在相同百分比值的重复条目。我正在尝试从最大值到最小值获取频率,您建议我将sort()放在何处以接收该输出?就在密码数据列表中x的前面的一行:…
在您的输出功能中。