私は私のこの回答と同じ気持ちを持っています。私が読んだすべての回答は、新しいオブジェクトを作成するように思えます。
私はリストをその場で変更することを好みます。
次のコードでは、各リストの不要なセクションを適切に削除し (リストはソートされているため、簡単です)、EADPコーディング スタイルを尊重します (許可よりも許しを求める方が簡単です) 。
d={1:[1,6,16,32,50],2:[1,5,15],7:[6,7,9],13:[10,12,23,55]}
k = 15
for ki,li in d.items():
    try:
        x = next(x for x in li if x>=k)
    except:
        del d[ki]
    else:
        i = li.index(x)
        li[0:i] = []
print d
# {1: [16, 32, 50], 2: [15], 13: [23, 55]}
.
編集 1
コードを変更しました。d.items()の代わりに反復する義務があるため、あまり良くありませんd.iteritems()。この最後のケースでは、反復中に辞書を変更できません。
.
編集 2
私は試してみましたがbisect_left()、それは確かに最速のソリューションです。この下の 3 番目のコードです。2枚目はRussWのものを修正。最初のものは私の以前のコードです
k = 15
te = clock()
for jj in xrange(10000):
    d={1:[1,6,16,32,50],2:[1,5,15],7:[6,7,9],13:[10,12,23,55]}
    for ki,li in d.items():
        try:
            x = next(x for x in li if x>=k)
        except:
            del d[ki]
        else:
            i = li.index(x)
            li[0:i] = []
print clock() - te
print d
            
print '------------------------------------------'
d={1:[1,6,16,32,50],2:[1,5,15],7:[6,7,9],13:[10,12,23,55]}
te = clock()
for jj in xrange(10000):
    dct={1:[1,6,16,32,50],2:[1,5,15],7:[6,7,9],13:[10,12,23,55]}
    for key, lst in dct.items():
        gn = None
        for i, x in enumerate(lst):
            if x >= k:
                gn = i
                break
        if gn is None:
            del dct[key]
        else:
            dct[key] = lst[gn:]
print clock() - te
print dct
print '------------------------------------------'
te = clock()
for jj in xrange(10000):
    d={1:[1,6,16,32,50],2:[1,5,15],7:[6,7,9],13:[10,12,23,55]}
    for ki,li in d.items():
    i = bisect_left(li,15)
    if i==len(li):
        del d[ki]
    else:
        li[0:i] = []
print clock() - te
print d
結果
0.22918869577
{1: [16, 32, 50], 2: [15], 13: [23, 55]}
------------------------------------------
0.163871665254
{1: [16, 32, 50], 2: [15], 13: [23, 55]}
------------------------------------------
0.100142057161
{1: [16, 32, 50], 2: [15], 13: [23, 55]}