2015-10-16 119 views
-2

這是一個簡單的程序,但我發現它很難實際工作。 我有 database 3元組。這個程序做什麼?

import matplotlib.pyplot as plt 

queries = {} 
rewrites = {} 
urls = {} 


for line in open("data.tsv"): 
    q, r, u = line.strip().split("\t") 

    queries.setdefault(q,0) 
    queries[q] += 1 
    rewrites.setdefault(r,0) 
    rewrites[r] += 1 
    urls.setdefault(u,0) 
    urls[u] += 1 

sQueries = [] 
sQueries = [x for x in rewrites.values()] 
sQueries.sort() 

x = range(len(sQueries)) 
line, = plt.plot(x, sQueries, '-' ,linewidth=2) 
plt.show() 

這是整個程序, 現在

queries.setdefault(q,0) 

此命令將設置的值爲0,如果密鑰i,E和q是找不到的。

queries[q] += 1 

如果鍵存在,此命令會將每個鍵的值遞增1。 我們繼續使用所有元組。 然後,

sQueries = [x for x in rewrites.values()] 

然後我們存儲的值從字典重寫,列出Squeries

x = range(len(sQueries))

此命令正在發生的事情,我沒有得到。任何人都可以請解釋。

+0

您是否試過查找'range'和'len'函數的文檔? – TigerhawkT3

+0

是的,我知道什麼範圍和len做。 –

+0

[範圍](https://docs.python.org/2/library/functions.html#range),[len](https://docs.python.org/2/library/functions.html#rang) – Maikflow

回答

2

本:

sQueries = [] 
sQueries = [x for x in rewrites.values()] 
sQueries.sort() 

換句話說就是寫

sQueries = rewrites.values() 
sQueries = sorted(sQueries) 

的鈍角方式,rewrites字典排序值。如果,爲了論證,sQueries == [2, 3, 7, 9],然後len(sQueries) == 4range(4) == [0, 1, 2, 3]

所以,現在你正在繪製(0,2), (1,3), (2,7), (3,9),這對我來說似乎不是很有用。您似乎更希望x軸上的鍵的rewrites,這將是您從TSV文件中讀取的r的不同值。

+0

或者'sQueries = sorted(rewrites.values())'! – jonrsharpe

+0

這個答案對Python 2是正確的,但是在Python 3中'range(4)'是一個'range'對象,而不是'list'。我想,看到問題中指定的內容會很高興。 – TigerhawkT3

3
len(sQueries) 

給出列表sQueries元素數目

x = range(len(sQueries)) 

將從0,1創建包含元素的列表的x,...到(但不包括)的sQueries陣列的長度

+1

也許值得強調的是,它是0,1,...直到但不包括sQueries的長度。 – zehnpaard

2
length = len(sQueries) # this is length of sQueries 
r = range(length) # this one means from 0 to length-1 

所以

x = range(len(sQueries)) # means x is from 0 to sQueries length - 1